《深入理解java虚拟机》学习笔记一

时间:2023-01-02 15:32:45

虚拟机与java虚拟机

虚拟机是通过虚拟化软件(例如VMware)在PC平台上仿真一台和本机具有相同的硬件环境,它有显卡、声卡、处理器等硬件。与此同时衍生出虚拟机系统的概念,虚拟机系统与虚拟机的本质区别是前者依赖于后者,虚拟机系统是在虚拟机基础上安装的系统,就像我们Pc上安装Windows和Linux系统一样。虚拟机系统是我们pc系统的映像,彼此互不影响,可以进行通信。
java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统,通俗地说运行java的计算机。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行, 实现了”一次编写,到处运行”。

目前常用Java虚拟机
1. Sun HotSpot VM:这款虚拟机是目前使用范围最广的虚拟机,它并非是由Sun公司开发的,而是由名为“Longview Technologies“小公司设计完成的,后来被名噪一时的Sun公司收购了。主要特点:热点代码探测技术,通过编译器和解释器的协调工作,有助于代码优化,编写高质量的代码。
2. BEA JRockit VM:这款虚拟机是BEA公司设计完成的,命运和Longview Technologies一样的,它曾号称“世界上运行速度最快的虚拟机”,看名字就知道。JRockit虚拟机专注于服务器端运用,启动速度慢,但它的垃圾收集器处于领先水平。
3. Google Android Dalvik VM:准确地来说Dalvik并不能归为java虚拟机,它和Java虚拟机工作原理不一样。Java虚拟机是将.class文件直接编译为字节码,而Dalvik不能将.class文件直接编译,而是借助于dex工具将.class文件编译成dex文件运行。

Java虚拟机内存管理分析

《深入理解java虚拟机》学习笔记一

程序计数器:当前执行的字节码行号指示器,通过改变计数器的值来选择下一条要执行的字节码指令。分支、循环、选择、异常处理等功能都依赖它。
:保存局部变量的值包括:1.保存基本数据类型(8种)的值;2.保存指向堆区对象的应用指针,也可以用来保存加载方法时的帧。
:用来存放动态产生的数据,比如new出来的对象和数组。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。对象的创建和销毁有虚拟机自动完成,堆是垃圾收集器管理的主要区域。
方法区:是各个线程的共享区域,用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
常量池:它是方法区的一部分,JVM为每个已加载的类型维护一个常量池,用于存放编译器生成的各种字面量和符号引用。
代码段:用来存放从硬盘上读取的源程序代码。
数据段:用来存放static修饰的静态成员(在java中static的作用就是说明该变量,方法,代码块是属于类的还是属于实例的)。