Jvm 概述

今天突然想看一下关于jvm的东西,所以就查了一些资料,下面内容是转载部分

1,什么是JVM?
JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机。
jvm是运行在操作系统之上的,与硬件没有任何关系。
2,JVM跨平台及原理


跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行。
原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM) 
3,JVM的分类

 


类加载子系统。
运行时数据区 [ 我们核心关注这里 的栈、堆、方法区 ]。

执行引擎(一般都是JIT编译器和解释器共存)

JIT编译器(主要影响性能):编译执行; 一般热点数据会进行二次编译,将字节码指令变成机器指令。将机器指令放在方法区缓存。

解释器(负责响应时间,他的响应时间很快):逐行解释字节码。

4,JVM的位置


JVM位于操作系统上层,但是位于应用程序下层。

5,JVM的体系结构


入口是编译好的字节码文件(编译器前端)-->经过类加载子系统(将我们的字节码加载到内存当中,生成一个class对象,中间经过三步:加载--->链接--->初始化)

 在内存中,多个对象共享内存的是方法区和堆区(多个线程共享区)。

Java虚拟机栈,本地方法栈,程序计数器每一个线程独有一份。

执行引擎:解释器(解释运行),jit及时编译器(编译器后端),垃圾回收器三部分。

6,Java代码的执行流程


 高级语言翻译为机器指令,主要是由执行引擎完成的。
解释器(解释运行,把字节码翻译为机器指令,主要负责翻编译器性能)。
jit及时编译器(编译器后端,主要是把热点代码缓存起来,主要负责编译器性能)组成执行引擎。

7,JVM的架构模型
Java编译器输入的指令流基本上是基于栈的指令集架构,另一种指令集架构是基于寄存器的指令集架构,两种架构之间的区别如下:

基于栈实现的指令集特点如下:

设计和实现更加简单,适用于资源受限的系统。

避开了寄存器额分配难题,使用零地址指令分配方式。

指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器更加容易实现。

不需要硬件支持,可移植性好,更好实现跨平台。

基于栈的指令集:跨平台性,指令集小,指令多执行性能比寄存器差。

基于寄存器指令集的特点:

典型的应用是x86二进制指令集,比如传统的pc以及android的davlik虚拟机。

指令集架构完全依赖于硬件,可移植性差。

性能优秀和执行更加高效。

花费更少的指令去完成一项任务。

在大部分情况下,基于寄存器的指令集往往都以一地址指令,二地址指令,三地址指令为主,而基于栈结构的指令集则以零地址为主。

小结:

由于扩平台式的设计,Java的指令集都是根据栈来设计的,不同的平台cpu架构不同,所以不能设计为基于寄存器的,优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

8,JVM的生命周期
虚拟机的启动

Java虚拟机的启动是通过引导类加载器bootstrap class loader创建一个初始类initail calss来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的执行:

一个运行着的java虚拟机有着清晰的任务,执行java程序。

程序开始执行虚拟机就运行,程序结束虚拟机就结束运行。

执行一个java程序的时候,真真正正的在执行的是一个java虚拟机进程。

虚拟机的停止:以下几种情况会退出虚拟机:

程序正常执行结束。

程序在运行过程中遇到错误或者异常而终止执行。

由于操作系统发故障而导致虚拟机进程终止运行。

某一个线程调用了Runtime类或者system类的exit方法,或者调用runtime类的halt方法,并且java安全管理器允许执行安全退出的方法。

9,三大商业虚拟机
Sun HotSpot

提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。

在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码, 并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。

在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。 Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。 整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务, 使用HotSpot的JIT编译器与混合的运行时系统。

从服务器,桌面,到移动端,嵌入式都有应用。

BEA JRocket

专注于服务端应用(JRockit内部不包含解析器实现,全部代码都靠即时编译器编译后执行)。

Jrockit JVM 是世界上最快的jvm3. 2008年被oracle收购。

专注于服务器端的应用。

它不太关注程序的启动速度,因此JRockit内部不包含解析器的实现,全部代码都靠及时编译器编译之后执行。

iBM J9

市场定位与hotspot接近,服务器端,桌面应用,嵌入式等。

目前,是影响力最大的三大商业虚拟机之一。

应用于IBM的各种Java产品
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值