`

JVM gc只新生代串行GC

阅读更多

1.代码一:

 

 

  1. public class JVMTest {  
  2.     public static void main(String args[]) throws InterruptedException {  
  3.         byte [] bytes1 = new byte[1024*1024*2];  
  4.         byte [] bytes2 = new byte[1024*1024*2];  
  5.         byte [] bytes3 = new byte[1024*1024*4];  
  6.         Thread.sleep(2000);  
  7.         byte [] bytes4 = new byte[1024*1024*4];  
  8.         Thread.sleep(2000);  
  9.     }  
  10. }  


执行:java -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintHeapAtGC -Xloggc:gc.log JVMTest

 

gc两次:

 

  1. {Heap before GC invocations=0 (full 0):  
  2.  def new generation   total 9216K, used 5287K [7f9a00000, 7fa400000, 7fa400000)  
  3.   eden space 8192K,  64% used [7f9a00000, 7f9f29c78, 7fa200000)  
  4.   from space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  5.   to   space 1024K,   0% used [7fa300000, 7fa300000, 7fa400000)  
  6.  tenured generation   total 10240K, used 0K [7fa400000, 7fae00000, 7fae00000)  
  7.    the space 10240K,   0% used [7fa400000, 7fa400000, 7fa400200, 7fae00000)  
  8.  compacting perm gen  total 21248K, used 4813K [7fae00000, 7fc2c0000, 800000000)  
  9.    the space 21248K,  22% used [7fae00000, 7fb2b3628, 7fb2b3800, 7fc2c0000)  
  10. No shared spaces configured.  
  11. 0.904: [GC 5287K->4447K(19456K), 0.0315833 secs]  
  12. Heap after GC invocations=1 (full 0):  
  13.  def new generation   total 9216K, used 351K [7f9a00000, 7fa400000, 7fa400000)  
  14.   eden space 8192K,   0% used [7f9a00000, 7f9a00000, 7fa200000)  
  15.   from space 1024K,  34% used [7fa300000, 7fa357ed8, 7fa400000)  
  16.   to   space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  17.  tenured generation   total 10240K, used 4096K [7fa400000, 7fae00000, 7fae00000)  
  18.    the space 10240K,  40% used [7fa400000, 7fa800020, 7fa800200, 7fae00000)  
  19.  compacting perm gen  total 21248K, used 4813K [7fae00000, 7fc2c0000, 800000000)  
  20.    the space 21248K,  22% used [7fae00000, 7fb2b3628, 7fb2b3800, 7fc2c0000)  
  21. No shared spaces configured.  
  22. }  
  23. {Heap before GC invocations=1 (full 0):  
  24.  def new generation   total 9216K, used 4711K [7f9a00000, 7fa400000, 7fa400000)  
  25.   eden space 8192K,  53% used [7f9a00000, 7f9e41eb0, 7fa200000)  
  26.   from space 1024K,  34% used [7fa300000, 7fa357ed8, 7fa400000)  
  27.   to   space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  28.  tenured generation   total 10240K, used 4096K [7fa400000, 7fae00000, 7fae00000)  
  29.    the space 10240K,  40% used [7fa400000, 7fa800020, 7fa800200, 7fae00000)  
  30.  compacting perm gen  total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000)  
  31.    the space 21248K,  22% used [7fae00000, 7fb2b4498, 7fb2b4600, 7fc2c0000)  
  32. No shared spaces configured.  
  33. 2.940: [GC 8807K->8537K(19456K), 0.0193472 secs]  
  34. Heap after GC invocations=2 (full 0):  
  35.  def new generation   total 9216K, used 345K [7f9a00000, 7fa400000, 7fa400000)  
  36.   eden space 8192K,   0% used [7f9a00000, 7f9a00000, 7fa200000)  
  37.   from space 1024K,  33% used [7fa200000, 7fa2566e8, 7fa300000)  
  38.   to   space 1024K,   0% used [7fa300000, 7fa300000, 7fa400000)  
  39.  tenured generation   total 10240K, used 8192K [7fa400000, 7fae00000, 7fae00000)  
  40.    the space 10240K,  80% used [7fa400000, 7fac00030, 7fac00200, 7fae00000)  
  41.  compacting perm gen  total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000)  
  42.    the space 21248K,  22% used [7fae00000, 7fb2b4498, 7fb2b4600, 7fc2c0000)  
  43. No shared spaces configured.  
  44. }  

2.代码2:

 

 

  1. public class JVMTest {  
  2.      public static void main(String args[]) throws InterruptedException {  
  3.         byte [] bytes1 = new byte[1024*1024*2];  
  4.         byte [] bytes2 = new byte[1024*1024*2];  
  5.         byte [] bytes3 = new byte[1024*1024*2];  
  6.         System.out.println("step 1");  
  7.         byte [] bytes4 = new byte[1024*1024*2];  
  8.         Thread.sleep(2000);  
  9.         System.out.println("step 2");  
  10.         byte [] bytes5 = new byte[1024*1024*2];  
  11.         byte [] bytes6 = new byte[1024*1024*2];  
  12.         System.out.println("step 3");  
  13.         byte [] bytes7 = new byte[1024*1024*2];  
  14.         Thread.sleep(2000);  
  15.     }  
  16. }  



 

java -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintHeapAtGC -Xloggc:gc.log JVMTest 

1次minor gc 一次full gc:原因 minor gc晋升到旧生代的大小大于旧生代的剩余空间。

 

  1. {Heap before GC invocations=0 (full 0):  
  2.  def new generation   total 9216K, used 7335K [7f9a00000, 7fa400000, 7fa400000)  
  3.   eden space 8192K,  89% used [7f9a00000, 7fa129c88, 7fa200000)  
  4.   from space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  5.   to   space 1024K,   0% used [7fa300000, 7fa300000, 7fa400000)  
  6.  tenured generation   total 10240K, used 0K [7fa400000, 7fae00000, 7fae00000)  
  7.    the space 10240K,   0% used [7fa400000, 7fa400000, 7fa400200, 7fae00000)  
  8.  compacting perm gen  total 21248K, used 4814K [7fae00000, 7fc2c0000, 800000000)  
  9.    the space 21248K,  22% used [7fae00000, 7fb2b38c0, 7fb2b3a00, 7fc2c0000)  
  10. No shared spaces configured.  
  11. 1.019: [GC 7335K->6495K(19456K), 0.0418591 secs]  
  12. Heap after GC invocations=1 (full 0):  
  13.  def new generation   total 9216K, used 351K [7f9a00000, 7fa400000, 7fa400000)  
  14.   eden space 8192K,   0% used [7f9a00000, 7f9a00000, 7fa200000)  
  15.   from space 1024K,  34% used [7fa300000, 7fa357ed8, 7fa400000)  
  16.   to   space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  17.  tenured generation   total 10240K, used 6144K [7fa400000, 7fae00000, 7fae00000)  
  18.    the space 10240K,  60% used [7fa400000, 7faa00030, 7faa00200, 7fae00000)  
  19.  compacting perm gen  total 21248K, used 4814K [7fae00000, 7fc2c0000, 800000000)  
  20.    the space 21248K,  22% used [7fae00000, 7fb2b38c0, 7fb2b3a00, 7fc2c0000)  
  21. No shared spaces configured.  
  22. }  
  23. {Heap before GC invocations=1 (full 0):  
  24.  def new generation   total 9216K, used 6754K [7f9a00000, 7fa400000, 7fa400000)  
  25.   eden space 8192K,  78% used [7f9a00000, 7fa040af0, 7fa200000)  
  26.   from space 1024K,  34% used [7fa300000, 7fa357ed8, 7fa400000)  
  27.   to   space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  28.  tenured generation   total 10240K, used 6144K [7fa400000, 7fae00000, 7fae00000)  
  29.    the space 10240K,  60% used [7fa400000, 7faa00030, 7faa00200, 7fae00000)  
  30.  compacting perm gen  total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000)  
  31.    the space 21248K,  22% used [7fae00000, 7fb2b47b0, 7fb2b4800, 7fc2c0000)  
  32. No shared spaces configured.  
  33. 3.073: [Full GC 12898K->12633K(19456K), 0.0712905 secs]  
  34. Heap after GC invocations=2 (full 1):  
  35.  def new generation   total 9216K, used 4441K [7f9a00000, 7fa400000, 7fa400000)  
  36.   eden space 8192K,  54% used [7f9a00000, 7f9e56680, 7fa200000)  
  37.   from space 1024K,   0% used [7fa300000, 7fa300000, 7fa400000)  
  38.   to   space 1024K,   0% used [7fa200000, 7fa200000, 7fa300000)  
  39.  tenured generation   total 10240K, used 8192K [7fa400000, 7fae00000, 7fae00000)  
  40.    the space 10240K,  80% used [7fa400000, 7fac000c8, 7fac00200, 7fae00000)  
  41.  compacting perm gen  total 21248K, used 4817K [7fae00000, 7fc2c0000, 800000000)  
  42.    the space 21248K,  22% used [7fae00000, 7fb2b47b0, 7fb2b4800, 7fc2c0000)  
  43. No shared spaces configured.  
  44. }  



新生代对象晋升到旧生代的规则:经过多次minor gc之后还存在的对象或者是to space放不下的直接晋升到old generation

 

 

分享到:
评论

相关推荐

    Sun Hotspot V1.6.0 JVM GC PPT.pdf

    - 可通过`-XX:+UseSerialGC`指定使用串行GC。 - **应用场景**: - 对响应时间要求不高的应用。 - 内存较小的应用。 ##### 3.2 并行回收GC (Parallel Scavenge) - **特点**: - 多线程进行垃圾回收。 - 默认的...

    JVM调优,GC算法汇总

    - **新生代GC算法选择**:串行GC或ParNew(并行GC的新生代版本)常用于新生代,而CMS或G1可能更适合老年代。 - **元空间**:JDK 8以后,类元数据存储在元空间而非永久代,需要合理设置元空间大小以避免溢出。 - **...

    JVM体系结构与GC调优

    每种GC有其适用场景和特点,例如串行GC适用于轻量级应用,而并发标记清除GC适合多核CPU的大内存应用。 GC调优涉及多个方面:选择合适的垃圾收集器、调整堆大小、设置新生代和老年代的比例、控制并发比、设置GC日志...

    java垃圾回收(gc)机制详解

    Java提供了多种GC类型,包括串行GC、并行GC、并发Mark Sweep(CMS)、G1 GC和ZGC等。 1. 串行GC:适用于小型应用,它在单线程环境下运行,收集速度慢,但停顿时间短。 2. 并行GC:多线程处理垃圾回收,提高了效率,...

    JVM入门资料,讲述了JVM的诞生到各种GC,以及垃圾回收

    JVM提供了多种GC算法,如串行GC、并行GC、并发标记清除(CMS)、G1垃圾收集器和ZGC等。这些算法各有优缺点,适用于不同场景。例如,串行GC适合轻量级应用,而G1和ZGC则更适合大型应用,它们旨在减少停顿时间并实现更...

    jvm常用调优方式

    首先,需要注意的是,在对 JVM 内存调优的时候不能只看操作系统级别 Java 进程所占用的内存,因为 GC 过后这个值是不会变化的。因此,在内存调优的时候要更多地使用 JDK 提供的内存查看工具,比如 JConsole 和 Java...

    JVM内存管理和JVM垃圾回收

    新生代GC包括串行GC(SerialGC)、并行回收GC(ParallelScavenge)和并行GC(ParNew)。 - **串行GC**:单线程执行,适合小型应用或对暂停时间要求不高的场景,可以通过`-XX:+UseSerialGC`指定。 - **并行回收GC**...

    jvm 参数调优实践

    本实践案例中,作者分别尝试了三种不同的垃圾回收(GC)策略:串行回收、并行回收和并发回收,并针对每种策略提供了具体的JVM参数配置。 一、串行垃圾回收 这是JVM的默认配置,主要适用于轻量级应用或低CPU核心数的...

    JVM调优与内存管理总结

    JVM内存主要分为新生代、老年代和持久代,每个区域都有其特定的垃圾回收策略。 1. 引用计数法(Reference Counting):这是一种简单的垃圾回收算法,但无法处理循环引用,容易导致内存泄漏。 2. 标记-清除法(Mark...

    gcviewer-1.33

    其次,GCViewer支持多种GC算法的分析,包括串行GC、并行GC、CMS(Concurrent Mark Sweep)、G1(Garbage-First)以及ZGC(Z Garbage Collector)等。不同的GC算法有着不同的优化目标和工作模式,通过GCViewer,...

    HotSpot GC官网文档截图 - 20200917

    【HotSpot GC官网文档截图 - 20200917】是一个珍贵的资源集合,包含了一系列关于Java HotSpot虚拟机(JVM)垃圾收集器(GC)的官方文档截图。这些截图详细介绍了GC的发展历程、不同版本的特性、选择GC的策略以及调优...

    Java程序员必须了解的GC工作原理

    串行GC适用于轻量级应用,它在一个单独的线程中执行GC,可能导致应用暂停。并行GC则在多个线程中同时执行,可以缩短暂停时间但可能增加CPU使用率。并发GC,如CMS(Concurrent Mark Sweep),尝试在应用程序运行的...

    jdk 1.6 gc详解

    新生代的GC策略有串行GC(Serial Copying)、并行回收GC(Parallel Scavenge)和ParNew GC。 串行GC是客户端模式下的默认选择,可以通过`-XX:+UseSerialGC`指定。它使用单线程进行垃圾收集,适合小型应用。新生代的...

    Sun JVM原理与内存管理

    - `-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC`:设置初始堆大小、最大堆大小、新生代大小,并指定使用串行GC。 - `-Xms20M -Xmx20M -Xmn10M -XX:PretenureSizeThreshold=3145728 -XX:+UseSerialGC`:设置对象大小...

    Java 6 JVM参数选项大全

    新生代收集担保是确保在Minor GC期间,如果新生代的对象无法全部转移到Survivor区,JVM有足够的空间在老年代进行分配。关闭此功能可能导致在某些情况下更频繁的Full GC,但可以减少内存浪费和潜在的性能提升。 在...

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

    串行GC适用于单线程应用程序,其操作简单但会导致较长时间的停顿。并行回收GC也称为吞吐量GC,它使用多个垃圾回收线程来加速垃圾回收过程,适用于多处理器系统。并发GC则试图减少应用程序的暂停时间,通过与应用程序...

    GChisto和gcviewer

    它能够以图表的形式展示内存分配和回收情况,包括堆内存的使用、不同代别(新生代、老年代)的变化、GC暂停时间等关键指标。通过GChisto,你可以直观地看到内存的动态变化,从而更好地理解GC的工作模式。使用GChisto...

    jvm详细介绍以及性能优化方法

    了解不同类型的GC算法,如串行GC、并行GC、CMS(Concurrent Mark Sweep)和G1(Garbage First),以及它们的适用场景,有助于选择最佳的GC策略。例如,对于低延迟需求的应用,CMS或G1可能是更好的选择。 另外,JVM...

    JVM面试专题.pdf

    面试中关于JVM的常见问题通常集中在内存模型、垃圾收集(GC)、对象分配和类加载等方面。以下是对这些知识点的详细解释: 1. **内存模型及分区**: - **方法区(Method Area)**:存储类信息,如类名、方法信息、...

Global site tag (gtag.js) - Google Analytics