java虚拟机是Java程序的运行环境,实现了JAVA的跨平台。
目录导航
一、What
1、JVM是什么?
Java Virtual Machine,java虚拟机是Java程序的运行环境。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
2、JDK、JRE、JVM三者的区别?
JDK包含了JRE,JRE中包含了JVM。
二、Why
1 、JVM的作用是什么?
JVM是Java程序的运行时解释器,对编译好的class文件进行逐行解释执行。JVM从软件层面屏蔽了底层硬件、指令层面的细节让他兼容各种系统,实现了开发者编写同一份Java源码、通过JVM可以到处运行。
2、为什么需要掌握JVM?
就像人在熟悉了周围环境后,才知道怎样生存、生存的更好。程序也是如此,掌握了Java程序的运行环境、工作原理,才知道如何编写出优雅的、性能更好的代码。
三、How
1、JVM的工作原理
1.1、JVM的主要组成
主要由3部分组成:
- 类加载器(Class Loader)
- 运行时数据区(Runtime Data Area)
- 执行引擎(Execution Engine)
内存模型(运行时数据区):
- 堆(Heap)
线程共享,存放对象实例和数组(有些情况对象实例不放入堆中),垃圾回收的主要区域。
- 方法区(Method Area)
线程共享,方法区是虚拟机规范中的一个抽象概念,有不同实现,1.8版本前的实现叫“永久代(Permanent Generation)”,1.8版本后的实现叫“元空间(Metaspace)”,存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
- Java虚拟机栈(Java Virtual Machine Stack)
线程私有,保存方法的局部变量、部分结果,并参与方法的调用和返回。
每个方法被执行的时候都会创建一个”栈帧”,用于存储局部变量表(包括参数)、操作栈、方法出口等信息。
每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
- 本地方法栈(Native Stack)
线程私有,与Java虚拟机栈类似,只不过Java虚拟机栈存储的是Java方法,本地方法栈存储的是Native方法。
- 程序计数器(Program Counter Register)
线程私有,记录正在执行的JVM字节码指令的地址,计数器保证切换线程后能恢复到正确的执行位置,所以每个线程都会有一个独立的程序计数器。
占用的内存空间很少,也是唯一一个在JVM规范中没有规定任何OutOfMemoryError(内存不足错误)的区域。
1.2、JVM生命周期
JVM可以分为三个阶段:
- 启动阶段:
- JVM的启动从执行Java应用程序的入口点开始。在此阶段,JVM会进行一系列的初始化操作。
- 初始化操作包括:加载系统属性配置、识别JDK版本、设置运行时环境等。
- 启动过程中,JVM会创建主线程,并调用Java应用程序的main()方法作为程序的入口。
- 运行阶段:
- 在运行阶段,JVM会解释和执行Java字节码,实现应用程序的功能。
- 首先,JVM将编译后的Java字节码加载到内存中,并进行类的解析和校验。
- 然后,JVM通过解释器(Interpreter)将字节码转换为机器代码,并执行程序的逻辑。
- 终止阶段:
- JVM的终止阶段是指JVM的退出过程,可以由多种方式触发。
- 触发条件包括:程序执行完成、显示调用System.exit()方法、遇到无法恢复的错误等。
- 在终止阶段,JVM会进行一些清理工作,如关闭打开的文件、释放系统资源等。
1.3、JVM中类的生命周期
类的整个生命周期包括七个阶段:
-
加载(Loading)
-
连接(Linking):
a. 验证(Verification)
b. 准备(Preparation)
c. 解析(Resolution) -
初始化(Initialization)
-
使用(Using)
-
卸载(Unloading)
2、JVM常用的命令
- ps -ef | grep java:查看当前的JVM参数配置。
- jinfo pid:查看Java进程的配置信息,包括系统属性和JVM命令行标志。
- jstat -gc pid:输出Java进程当前的GC情况。
- jmap -heap pid:输出Java堆的详细信息。
- jmap -histo:live pid:显示堆中对象的统计信息。
- jmap -F -dump:format=b,file=dumpFile.phrof pid:生成Java堆存储快照dump文件。
参考链接:
- https://blog.youkuaiyun.com/m0_65890371/article/details/131494243
- https://www.cnblogs.com/mikechenshare/p/16562589.html
2129

被折叠的 条评论
为什么被折叠?



