1、jvm组成以工作流程
jvm组成
类装载器、运行时数据区(内存模型)、字节码执行引擎
工作大致流程
首先我们的java类编译成class类文件,当我们的class文件开始执行,我们的虚拟机便开始工作。 类加载器将class加载到运行时数据区,然后字节码执行引擎工作
这里大家思考一下我们的调优主要是对那个组成部分调优呢?没错,就是我们的运行时数据区进行调优的!
有兴趣的同学可以看一下底层的二进制文件,因为二进制的文件是我们计算机执行的,我们看不懂,我们可以通过javap命令反编译汇编语言,得到新的文件,在官网查看每行代码对应的什么意思即可!
这是通过一段代码执行,总结的一张main方法在运行时数据区的数据图:
垃圾回收
将“GC Roots”对象作为七点,从这些节点开始向下搜索引用的对象,找到的对象标记为“非垃圾对象”,其余未标记的对象是垃圾对象。
GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等。
STW(Stop-The-World): 是在垃圾回收算法执⾏过程当中,将JVM内存冻结丶应用程序停顿的⼀种状态。
也就是说在STW状态下,所有的java线程都是停止状态的(GC线程除外)
这里提前透露一下,我们GC的优化重点就是减少STW的时间,并且我们JVM调优的重点也是STW操作。
堆内部的流转过程:
调优工具
1、java VisualVM (java自带工具)
2、阿里巴巴Arthas工具(阿里巴巴集团开源调优工具)
今天的基本概念就先讲到这,感谢大家的关注!
欢迎大家关注我的工种昊《coder练习生》