望着时间滴答滴答的流过,我不曾改变过 . . .

秋招之路7:全面JVM

jvm全景图

其中蓝色区域是线程独有的,黄色区域是线程共享的

分析方法

javap 命令 javap -c 可以对代码进行反汇编

里面的各种指令,可以用jvm指令手册一个一个查

一个线程的全景图


程序计数器:和计组一样,是存放下一条指令所在单元的地址的地方。

栈帧:一个方法对应一块栈帧内存区域。放自己方法里面各种变量用的。
其中局部变量表一般是放局部变量。操作数栈,一般是放操作过程中的常量。
局部变量表中的对象,存的是对象的地址,对象数据存在堆空间中。
动态链接:将符号引用转换为直接引用。[dai gan]

本地方法栈:一般是本地的native方法。

堆内存回收图

流程:
当Eden区满了后,GC收集Eden区,没有被收集的对象,分代年龄+1,进入From区;
下一次Eden区满后,GC收集Eden区和From区,没有被收集的对象,分代年龄+1,进入To区;
下一次Eden区满后,GC收集Eden区和To区,没有被收集的对象,分代年龄+1,进入From区;
...
直到有分代年龄为15的对象,进入到老年代。
当老年代满了后,开始Full GC[比较耗时].

分析内存情况的工具

jvisualvm:jdk自带的一个工具,然后可以安一个visual GC的插件。

名词

GC:垃圾收集器
Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非常短暂。
Major GC/Full GC:老年代GC,对整个堆进行垃圾收集

可达性分析算法

算法的基本思想:通过一系列的称之为“GC ROOTs”的对象作为起点,从这些起点开始向下搜索。
找到的对象都标记为非垃圾对象;其余对象标记为垃圾对象。
GC ROOTs根节点:线程栈的本地变量,静态变量,本地方法栈的变量等等。

jvm调优

主要调优在堆上,也有部分调优在方法区
目的:减少full GC的次数,减少每次full GC的执行时间。
需要

各种场景分析,具体垃圾收集器,垃圾收集算法进行分析。

一种分析方法:GC日志

posted @ 2020-02-20 16:24  whyaza  阅读(224)  评论(0编辑  收藏  举报