《深入理解Java虚拟机》读书笔记--02
写在前面的话:
在看这本书前面章节的时候,很多地方都提到了“新生代”和“老生代” 这两个名词,一开始我也懵逼,后来通过上网,看视频查阅相关资料,结合一些自己的理解,解释下这两个名词。
不管怎么样要先来个弱弱的开场白:有错的地方请各位多多指正!!!!!
JVM使用的是分代垃圾回收的方式,可以将Java对象分为”新生”对象和”老生”对象。
JVM将内存堆(Heap)分为两个区域,一个是”新生对象”区,另一个是”老生对象”区,Java将这两个区域分别称作是”新生代”和”老生代”。
程序运行的时候会有如下特点:
◆有些对象在创建后很快就没有对象使用它了。(新生代)
◆有些在一直被使用的对象很少再去引用新创建的对象。(老生代)
新生代由Eden Space和两块相同大小的Survivor Space(通常又称为S0和S1或From和To)构成,比例为 8:1:1。
新生代区域特点:
- 绝大多数新创建的对象都存放在这个区域
- 此区域一般来说较小而且JVM垃圾回收频率较高
- 采用的算法和存放对象特点使得该区域JVM垃圾回收的效率也非常高
老生代区域特点:
- 将在”新生代”中生存了较长时间的对象转移过来
- 区域一般要大一些而且增长的速度相对于”新生代”要慢一些
- 垃圾回收的执行频率也会低很多
了解这两个名字的好处是:
JVM在JVM垃圾回收处理时会消耗一定的系统资源,如果我们在JVM启动的时候添加相关参数来控制”新生代”区域
的大小以达到调整JVM垃圾回收处理的频率,那么我们就会合理利用系统资源。
相关控制参数:
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新生代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss设置每个线程的堆栈大小。
永久代指的是方法区,是Hotspot虚拟机特有的概念。
没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。
1 | 老年代空间大小=堆空间大小-年轻代大空间大小 |
- Title: 《深入理解Java虚拟机》读书笔记--02
- Author: 薛定谔的汪
- Created at : 2017-10-29 22:21:31
- Updated at : 2023-11-17 19:37:37
- Link: https://www.zhengyk.cn/2017/10/29/jvm/JVM-02/
- License: This work is licensed under CC BY-NC-SA 4.0.