java 虚拟机是什么?

      java虚拟机是一个将字节码指令映射为对应物理操作系统指令的程序。

      java程序的运行需要事先安装 jdk,而在jdk内部的jre中其核心就是 jvm。java源码是无法运行的,通过javac编译后的class文件也是无法直接运行在操作系统上的。操作系统仅识别遵守其cpu指令集规范的机器码。而为了使java程序得以运行,jvm在其中充当了这样的一个 翻译官的角色。

其本质就是用 c/c++ 编写的一个可运行的程序。对应不同版本的 操作系统 jvm都有其特有的实现版本。

java 虚拟机有什么意义?

    为了支持 java语言的跨平台特性。

java字节码 是一种介于 源码 与 机器码之间的一种程序指令的描述。 人 与 计算机 都无法识别。但jvm却可以识别,并翻译为对应的机器码。

从而 我们只需要在不同的 操作系统上安装 对应版本的虚拟机 即可以实现 仅编译一次的 字节码文件 运行在 不同版本的操作系统上。实现了 sun公司 1995年的承诺 :"一次编译,到处运行"

同时 jvm还为我们封装了很多实现细节,java语言本身的简单性,是建立在 jvm高度封装了开发中绝大多数难点的基础上。

列如: 对象空间的分配与回收,对内存的管理,线程的同步与调度,并发编程复杂的实现细节,网络编程,与IO处理。

jvm 在简化开发以及实现跨平台特性的前提是一java程序的运行性能为代价的,jvm对字节码的执行系统进行了逻辑上的抽象,是基于内存中虚拟机栈的执行。

这就要比传统的编译型语言基于cpu中指令寄存器的执行速度慢了很多。

而随着java虚拟机的不断发展 实现了各种优化技术,以热点探测技术为主的提升字节码执行速度的优化技术,使得java程序在某些情况下并不比c/c++慢多少。

同时  一些编译器字节码级别的优化大大的简化了 java语言的语法,泛型,枚举还有一些语法糖的引入也增加了java语言本身的可读性。

而随着java虚拟机的不断发展,早已经不再是局限与java语言本身,jvm已经不再仅仅支持java语言,列如Scala.

jvm 不仅仅实现了 跨平台更是实现了跨语言。

java虚拟机概述的更多相关文章

  1. Java 虚拟机概述

    虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.Java虚拟机屏蔽了与具体操作系统平 ...

  2. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  3. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  4. 图灵学院笔记-java虚拟机底层原理

    Table of Contents generated with DocToc 一.java虚拟机概述 二.栈内存解析 2.1 概述 2.2 栈帧内部结构 2.2.1 我们来解析一下compute() ...

  5. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  6. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  7. Java虚拟机(JVM)概述

    JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...

  8. [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

    Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...

  9. 深入理解Java虚拟机 - 垃圾收集概述

    首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单.易用.关键是傻瓜式的内存管理技术.GC技术起源于1960年诞生于M ...

随机推荐

  1. OpenWRT(RT5350) 路由客户模式(Routed Client) ,设置防火墙开放UDP指定端口

    /* *功     能: 本文主要功能是设置OpenWRT(RT5350) 系统实现路由客户模式,无线连接上级路由, * 无线释放AP客户端,实现伪装的中继(子网段与上级路由网段不同),同时更改防火墙 ...

  2. MTV模型

    django的MTV分别代表: model(模型):负责业务对象与数据库的对象(orm) template(模板):负责把页面展示给用户 view(视图):负责业务逻辑,并在适当的时候调用model和 ...

  3. Yii2之类自动加载

    在yii中,程序中需要使用到的类无需事先加载其类文件,在使用的时候才自动定位类文件位置并加载之,这么高效的运行方式得益于yii的类自动加载机制. Yii的类自动加载实际上使用的是PHP的类自动加载,所 ...

  4. C++数组做参数

    首先,看一下下面这段代码: void changearr(int a[],int n){    cout<<sizeof(a)<<endl;         // 输出4}in ...

  5. spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch application master

    spark-shell不支持yarn cluster,以yarn client方式启动 spark-shell --master=yarn --deploy-mode=client 启动日志,错误信息 ...

  6. 我的第一个python web开发框架(14)——后台管理系统登录功能

    接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前, ...

  7. Introduction of Git, Github and Gitlab

    ========================================================================== Version control is a syst ...

  8. CodeForces - 556B Case of Fake Numbers

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  9. redis源码分析之发布订阅(pub/sub)

    redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:htt ...

  10. C++编程求数组中重复的数字

    题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的 ...