]虚拟机是一种抽象的计算机,它有自己的指令集,有自己的内存管理体系。 在此类虚拟机上实现的语言比较低抽象层次的语言更加明了,更加简单易学。
如果你想成为一个资深的Java开发工程师,那么对于JVM虚拟机是一定要了解的。
在学习JVM之前,首先要有一个大前提,那就是JVM的运行是以栈为基础的。
在学习Java编程的时候我们都知道,在我们编写完成自己的程序源文件之后,首先Javac命令将java编译成字节码,然后使用Java
命令来执行编译之后的字节码文件。在这个时候 我们可以将其理解成为两部分,第一部分就是编译。第二部分就是执行。
如果想知道JAVAC是如何将Java源文件编程成CLASS字节码的同学,可以看一下《javac的学习_编译原理》。
编译Java源文件的命令是javac hello.java
在执行完javac命令之后,我们开始执行java hello命令。
2.JVM的组成
JVM由4大部分组成:ClassLoader【类加载】,Runtime Data Area【运行时数据区】,Execution Engine【执行引擎】,Native Interface【本地接口】。
(图片来自网络)
Runtime Data Area:
Stack(栈): Java栈的区域很小,只有1M,特点是存取速度很快,所以在stack中存放的都是快速执行的任务,基本数据类型的数
据,和对象的引用(reference)
Heap(堆): 对象数据存放.类的对象放在heap(堆)中,所有的类对象都是通过new方法创建,创建后,在stack(栈)会创建类对
象的引用(内存地址)
Method Area(方法区):类数据存放,通常 类数据包括字段和方法名等等
PC Register(PC寄存器(Program Counter Register))
本地方法栈则为虚拟机使用到的Native方法服务
Execution Engine 执行引擎
Java.exe的作用就是将Class文件加载到JVM中
最后,今天的分享就进行到这里.如果你有什么想要说的,欢迎留言。
类加载过程
系统收到了我们发出的指令,启动了一个Java虚拟机进程,这个进程首先从classpath中找到AppMain.class文件,读取这个文件中的二进制数据,然后把Appmain类的类信息存放到运行时数据区的方法区中。这一过程称为AppMain类的加载过程
参考资料: java中JVM的原理重温
https://my.oschina.net/wangsifangyuan/blog/711329
1:Java类加载过程
2:描述一下jvm加载class文件的过程
3:java内存分配
|