引言
在上一篇博客中我们详细分析了,JVM的内存结构。既然提到了JVM那么我们必须得谈一谈GC垃圾回收机制了,在分析垃圾回收机制之前呢,我们还是需要来内存结构中堆(Heap)的详细结构。
图中展示了堆中三个区域:Eden、From Survivor、To Survivor。从图中可以也可以看到它们的大小比例,准确来说是:8:1:1。为什么要这样设计呢,本篇文章后续会给出解答,还是根据垃圾回收的具体情况来设计的。
还记得在设置JVM时,常用的类似-Xms和-Xmx等参数吗?对的它们就是用来说设置堆中各区域的大小的。
控制参数详解:
- -Xms设置堆的最小空间大小。
- -Xmx设置堆的最大空间大小。
- -Xmn堆中新生代初始及最大大小(NewSize和MaxNewSize为其细化)。
- -XX:NewSize设置新生代最小空间大小。
- -XX:MaxNewSize设置新生代最大空间大小。
- -XX:PermSize设置永久代最小空间大小。
- -XX:MaxPermSize设置永久代最大空间大小。
- -Xss设置每个线程的堆栈大小。
对照上面两个图,再来看这些参数是不是没有之前那么枯燥了,它们在图中都有了对应的位置。
有没有发现没有直接设置老年代空间大小的参数?我们通过简单的计算获得。
- 老年代空间大小=堆空间大小-年轻代大空间大小
对上面参数立即了,但记忆有困难?那么,以下几个助记词可能更好的帮你记忆和理解参数的含义。
Xmx(memory maximum), Xms(memory startup), Xmn(memory nursery/new), Xss(stack size)。
对于参数的格式可以这样理解:
- -: 标准VM选项,VM规范的选项。
- -X: 非标准VM选项,不保证所有VM支持。
- -XX: 高级选项,高级特性,但属于不稳定的选项
GC概述
垃圾收集(Garbage Collection)通常被称为“GC”,由虚拟机“自动化”完成垃圾回收工作。
思考一个问题,既然GC会自动回收,开发人员为什么要学习GC和内存