秋招之路7:全面JVM

Posted whyaza

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了秋招之路7:全面JVM相关的知识,希望对你有一定的参考价值。

jvm全景图

技术图片

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

分析方法

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

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

一个线程的全景图

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

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

本地方法栈:一般是本地的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日志

以上是关于秋招之路7:全面JVM的主要内容,如果未能解决你的问题,请参考以下文章

秋招之路2: implements 与 extends ,抽象类总结

一个妹子的Android秋招面试总结(已拿BAT等7家口头offer)

2019 Android秋招提前批面试总结(已拿BAT等7家口头offer)

秋招总结JUC和JVM(秋招总结)

秋招总结双非本小菜鸡的坎坷秋招之路(附面经)

秋招总结双非本小菜鸡的坎坷秋招之路(附面经)