`

jvm_2_新生代老生代含义

 
阅读更多

 

 

题眼:
JVM使用的是分代垃圾回收的方式,可以将Java对象分为"年轻"对象和"年老"对象.
JVM将内存堆(Heap)分为两个区域,一个是"年轻"区,另一个是"老"区,Java将这两个区域分别称作是"新生代"和"老生代"。

详细:
JVM使用的是分代垃圾回收的方式,主要是因为在程序运行的时候会有如下特点:

◆大多数对象在创建后很快就没有对象使用它了。

◆大多数在一直被使用的对象很少再去引用新创建的对象。
因此就将Java对象分为"年轻"对象和"年老"对象,JVM将内存堆(Heap)分为两个区域,
一个放年轻对象,一个放年老对象,java对对内存的这两个区域分别成为 新生代,老生代。

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


老生代区域特点:
a) 将在"新生代"中生存了较长时间的对象转移过来
b) 区域一般要大一些而且增长的速度相对于"新生代"要慢一些
c) 垃圾回收的执行频率也会低很多


了解这个对于我们的好处是:
JVM在JVM垃圾回收处理时会消耗一定的系统资源,如果我们在JVM启动的时候添加相关参数来控制"新生代"区域的大小
以达到调整JVM垃圾回收处理的频率,那么我们就会合理利用系统资源。

操作新生代参数设置写法:
-Xmn


操作案例如下:

我们就用系统自带的程序作为例子,在命令行上键入如下指令:

CDC:\java\demo\jfc\SwingSet2[回车]C:\java\demo\jfc\SwingSet2> 
java-jar-verbose:gc-Xmn4mXX:+PrintGCDetailsSwingSet2.jar[回车]  

  
 
上面加入了一个新的参数"XX:+PrintGCDetails",这个参数能够打印出GC的详细信息。屏幕输出如下(节选):

[GC[DefNew:3469K->84K(3712K),0.0007778secs]23035K-> 
19679K(28728K),0.0009191secs][GC[DefNew:3284K-> 
171K(3712K),0.0007283secs]22878K-> 
19766K(28728K),0.0008669secs][GC[DefNew:3476K->
260K(3712K),0.0008504secs]23071K-> 
19855K(28728K),0.0009862secs][GC[DefNew:3502K-> 
87K(3712K),0.0009267secs]23096K-> 
19682K(28728K),0.0010610secs]  

 
我们需要解释一下输出的详细内容的意思,拿第一行输出来说:

"DefNew:3469K->84K(3712K),0.0007778secs"是指"新生代"的JVM垃圾回收情况,这里的意思是从占用3469K内存空间变为84K内存空间,用时0.0007778秒。

"23035K->19679K(28728K),0.0009191secs"是指总体GC的回收情况,整体堆空间占用从23035K降低到19679K的水平,用时0.0009191秒。

 

那么,这时候我们在将"新生代"的内存设为8M,并把堆的最大可控值设定为32M,再去执行,键入如下指令:

java-jar-verbose:gc-Xmn8m-Xmx32mXX:+PrintGCDetailsSwingSet2.jar[回车]  

 
 
得到的结果如下(节选):

[GC[DefNew:6633K->6633K(7424K),0.0000684secs]
[Tenured:18740K->18820K(24576K),0.0636505secs]25374K-> 
18820K(32000K),0.0639274secs][GC[DefNew:6646K-> 
6646K(7424K),0.0002581secs][Tenured:18820K-> 
18884K(24576K),0.0651957secs]25467K-> 
18884K(32000K),0.0658804secs][GC[DefNew:6611K-> 
6611K(7424K),0.0000668secs][Tenured:18884K-> 
18505K(24576K),0.0931406secs]25496K-> 
18505K(32000K),0.0934295secs]  

 

 


这个结果说明:

"[DefNew:6633K->6633K(7424K),0.0000684secs]"是指"新生代"的JVM垃圾回收情况,这里的意思是从占用6633K内存空间变为6633K内存空间,用时0.0000684秒。
"25374K->18820K(32000K),0.0639274secs"是指总体GC的回收情况,整体堆空间占用从25374K降低到18820K的水平,用时0.0639274秒。
"[Tenured:18740K->18820K(24576K),0.0636505secs]"是指"老生代"GC的回收情况,整体堆空间占用从18740K降低到18820K的水平,用时0.0009012秒。

 

通过这些参数的调整我们可以看到在处理垃圾收集问题时,从JVM垃圾回收的频率是时间方面的变化,我们可以根据不同程序的不同情况予以调整。

最后有必要提一下GC的相关参数:

-XX:+PrintGCDetails显示GC的详细信息
-XX:+PrintGCApplicationConcurrentTime打印应用执行的时间
-XX:+PrintGCApplicationStoppedTime打印应用被暂停的时间

 
注:":"后的"+"号表示开启此选项,如果是"-"号那么表示关闭此选项。

分享到:
评论

相关推荐

    简单实用JVM参数配置

    但是,如果对象频繁晋升至老生代,可能需要调整新生代和老生代的比例。 2. **老生代**:老生代是内存溢出的常见区域。如果对象在老生代无法被垃圾回收,或者容量不足,可考虑增加老生代大小(如通过`-Xmx`设置),...

    垃圾回收系列(3):CLR与JVM垃圾回收器的比较扫描.pdf

    在CLR中,分代被细分为0代、1代和2代,而JVM则主要分为新生代(Young Generation)和旧生代(Old Generation)。这种分代的目的是为了提高垃圾回收的效率,基于对象存活时间的统计数据,对不同代的对象采用不同的...

    JVM实战篇笔记.pdf

    本篇文章主要探讨了JVM实战中的关键知识点,包括JVM参数的使用、内存管理以及常见参数的含义。 首先,JVM参数分为标准参数、-X参数和-XX参数。标准参数如`-version`和`-help`在不同JDK版本间保持稳定。-X参数是非...

    JVM内存模型和性能优化.docx

    分代垃圾收集(Generational Garbage Collection)结合了这些算法的优点,将内存划分为新生代(New Generation)、Survivor空间和老生代(Old Generation),以适应不同生命周期的对象。 JVM性能优化主要涉及内存...

    JVM内存—jstat分析

    `jstat -gcutil <pid>` 命令用于查看新生代、老生代及持久代的垃圾收集情况统计,输出的数据包括但不限于上述 `-gc` 选项输出的信息,但通常会更简洁直观。 #### 四、总结 `jstat`作为一款强大的JVM监控工具,不仅...

    hllvm.新生代回收调试的一些心得1

    1. **堆(Heap)**:Java对象存储的主要区域,分为新生代、老生代(Tenured Generation)和持久代(Permanent Generation)。 2. **新生代(Young Generation)**:存放生命周期较短的对象,分为伊甸园(Eden Space...

    Java最常见200面试题以及解析

    205. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别? 新生代回收器:Serial、ParNew、Parallel Scavenge 老年代回收器:Serial Old、Parallel Old、CMS 整堆回收器:G1 新生代垃圾回收器一般采用的...

    Tomcat性能调优实战总结

    Java虚拟机(JVM)的内存堆被分为两个主要区域:新生代和老生代。新生代用于存放新创建的对象,大部分对象会在短时间内死亡,因此这里的垃圾回收频繁且高效。新生代又分为Eden区和两个存活区。当Eden区满时,会触发...

    JAVA内存结构-GC-CLASSLOAD

    - **特性**:线程共享,GC的主要区域,分为新生代和老生代,目的是为了高效地回收内存和分配内存。 - **异常**:当堆内存不足时,抛出`OutOfMemoryError`异常。 2. **虚拟机栈** - **作用**:每个线程都有自己的...

    java面试题.docx

    - 老生代垃圾回收器:包括 Serial Old GC、Parallel Old GC 和 G1 GC。Serial Old 是 Serial GC 的老年代版本;Parallel Old 是 Parallel GC 的老年代版本,支持多线程;G1 GC 是新一代的垃圾回收器,目标是实现可...

    社招面试经验总结.pdf

    面试者还被问及JVM相关知识,包括内存模型(堆、栈、程序计数器、方法区)、垃圾回收机制(分代收集、GC Roots、新生代和老生代的策略)以及类加载机制(双亲委派模型)。面试官还进一步追问了反射机制和设计模式的...

    《G1 GC 性能优化实战.pdf》

    * 分代:G1 GC 将堆空间分成新生代和老生代,新生代用于存储短生命周期的对象,老生代用于存储长生命周期的对象。 * 分区:G1 GC 将堆空间分成多个分区,每个分区都有自己的垃圾回收机制。 * 并发标记:G1 GC 使用...

    Java的GC机制探微.pdf

    堆内存分为新生代(Young Generation)、老年代(Tenured Generation/老生代/Old Generation)和持久代(Permanent Generation/元空间)。新生代主要用于存放新生的对象,而老年代则存放生存时间较长的对象。 2. **...

    java后台工程师面试规范.pdf

    2. **JVM理解**:理解各个内存区域(如新生代、老生代)、垃圾收集机制和性能优化。 3. **算法与编码能力**:测试候选人的数据结构知识,复杂度计算以及编写代码解决问题的能力。 4. **设计模式**:了解并能应用设计...

    01-JAVA岗位笔试题(A卷)附答案

    在Java虚拟机(JVM)中,对象的生命周期通常分为两个阶段:新生代和老生代。 - **新生代**:采用**复制算法**。新生代的对象通常生命周期较短,因此通过复制算法可以高效地回收大部分不再使用的对象。 - **老生代**:...

Global site tag (gtag.js) - Google Analytics