《深入理解Java虚拟机》读书笔记--02

薛定谔的汪

写在前面的话:

在看这本书前面章节的时候,很多地方都提到了“新生代”和“老生代” 这两个名词,一开始我也懵逼,后来通过上网,看视频查阅相关资料,结合一些自己的理解,解释下这两个名词。
不管怎么样要先来个弱弱的开场白:有错的地方请各位多多指正!!!!!
JVM使用的是分代垃圾回收的方式,可以将Java对象分为”新生”对象和”老生”对象。
JVM将内存堆(Heap)分为两个区域,一个是”新生对象”区,另一个是”老生对象”区,Java将这两个区域分别称作是”新生代”和”老生代”。

程序运行的时候会有如下特点:

◆有些对象在创建后很快就没有对象使用它了。(新生代)
◆有些在一直被使用的对象很少再去引用新创建的对象。(老生代)

新生代由Eden Space和两块相同大小的Survivor Space(通常又称为S0和S1或From和To)构成,比例为 8:1:1。

新生代区域特点:

  1. 绝大多数新创建的对象都存放在这个区域
  2. 此区域一般来说较小而且JVM垃圾回收频率较高
  3. 采用的算法和存放对象特点使得该区域JVM垃圾回收的效率也非常高

老生代区域特点:

  1. 将在”新生代”中生存了较长时间的对象转移过来
  2. 区域一般要大一些而且增长的速度相对于”新生代”要慢一些
  3. 垃圾回收的执行频率也会低很多

了解这两个名字的好处是:

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.
On this page
《深入理解Java虚拟机》读书笔记--02