黑马程序员技术交流社区

标题: 【长沙校区】浅谈Java虚拟机 [打印本页]

作者: 长沙-小知姐姐    时间: 2018-12-28 15:08
标题: 【长沙校区】浅谈Java虚拟机
本帖最后由 长沙-小知姐姐 于 2019-1-3 09:30 编辑


Java , 前端全网资源链接 : 【长沙校区】集合Java,前端所有基础入门,重点问题一览帖


1. 虚拟机是什么:

百度百科:

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统


2. Java虚拟机又是什么:

Java虚拟机有自己完善的硬体架构,如处理器堆栈寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。也就是有了不同版本的虚拟机,能使我们Java程序真正的实现:“一处编译,到处运行”的效果。


3. JVM结构



JVM主要由类加载器子系统、运行时数据区(内存空间)、执行引擎以及与本地方法接口等组成。其中运行时数据区又由方法区、堆、Java栈、PC寄存器、本地方法栈组成。

4. 类加载子系统
我们编译过后的class文件是作为JVM的一种"原料"被输入到虚拟机的内部中去的,而负责这一部分工作的,其实是在JVM内部中有一个叫做类加载器子系统,这个子系统用来在运行时根据需要加载类。意思就是,在JVM执行过程中,只有当它需要一个类的时候,才会去调用这个类加载器去加载这个类,并不会一开始就去加载所有的类。意思就是JVM在执行的时候,当程序需要调用一个A类的时候,类加载器才会去调用这个A类,并不会一开始执行的时候就会把A、B、C...Z类全部都加载出来,那工作量的大了去了。一般来说,虚拟机加载类的时机,是在第一次使用一个新的类的时候加载。


5. 执行引擎子系统

由虚拟机加载的类,被加载到JVM的内存中之后,虚拟机会读取并执行它里面存在的字节码指令,虚拟机中执行字节码指令的部分叫做执行引擎子系统。执行引擎的作用之一就是把各个class文件动态的连接起来。


6. 垃圾回收子系统

java和其他语言有一个最大的不同,也是其特色之一,就是GC,垃圾回收机制。JVM会进行自动内存管理,具体来说就是自动释放没有用的对象,而不需要程序员编写代码去手动释放资源。这部分工作就是由JVM中的垃圾收集子系统来负责的。所以,综上所诉,一个JVM实例在运行过程中有三个子系统来保障它能正常运行。如图:



虚拟机的运行,必须加载class字节码文件,并且执行该文件中的字节码指令。那么它做这么多的事情,肯定会需要它自己的一个空间,也就是说虚拟机需要空间来存放数据。它加载的字节码需要一个单的内存空间来存放,一个线程的执行,也需要内存空间来维护方法的调用关系,存放方法中的数据和中间计算结果等等等等。虚拟机在运行时内存区大概可以分成几个部分(大致表示一下),如图:




7. 总结:

1.JVM(java虚拟机)从操作系统的角度来看,就是一个普通的进程;

2.这个虚拟机的进程较为特殊,它能够加载.class字节码文件。如果把JVM比作一辆车,那么class字节码文件就是油(气、电);

3.加载class字节码文件的是一个叫做类加载器的子系统。就好比汽车的油箱口,将油送达至油箱中;

4.JVM中的执行引擎子系统是用来执行class文件中的字节码指令。就好比汽车的发动机,对油箱中的油进行燃烧处理。

5.JVM在执行过程中,要分配内存创建对象,当这些对象过时无用了,必须要自动清理这些无用的对象。垃圾回收机制(GC)就是由垃圾收集器子系统来负责的。就好比汽车发动机将汽油燃烧后,排出废气,腾出空间燃烧下一次的汽油。


作者: 一个人一座城0.0    时间: 2018-12-30 13:19
看一看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2