`

GC时旧生代空间大小的疑问.

    博客分类:
  • JVM
阅读更多
-Xms18m
-Xmx18m
-Xmn16m
-XX:+UseSerialGC -XX:-UseAdaptiveSizePolicy
-XX:SurvivorRatio=6
-verbose:gc 
-XX:+PrintGC
-XX:+PrintGCDetails

 

使用上面的JVM参数运行下面的代码时,GC日志中旧生代总容量变成4096K(4M),与设置的2M(18-16)不一样

 

[Tenured: 3072K->3072K(4096K), 0.0143395 secs]

注意这里,括号里面4096K表示旧生代所有空间为4M,而不是设置的2M.

如果设置 -Xms24m -Xmx24m,则由正常了(输出[Tenured: 6144K->6144K(8192K), 0.0129542 secs]).

 

这个到底嘛原因呢?

 

输出如下:

Minor GC should happen

[GC [DefNew (promotion failed): 11509K->11659K(14336K), 0.0123390 secs][Tenured: 3072K->3072K(4096K), 0.0143395 secs] 11509K->11413K(18432K), [Perm : 2075K->2075K(12288K)], 0.0333981 secs] [Times: user=0.01 sys=0.00, real=0.03 secs] 

[Full GC [Tenured: 3072K->3072K(4096K), 0.0097443 secs] 13461K->13461K(18432K), [Perm : 2081K->2081K(12288K)], 0.0097931 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 

[Full GC [Tenured: 3072K->3072K(4096K), 0.0177553 secs] 13461K->13448K(18432K), [Perm : 2081K->2075K(12288K)], 0.0178095 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] 

java.lang.OutOfMemoryError: Java heap space

Dumping heap to D:/D/myeclipse_dump.bin ...

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

  at jvm.MultiMajorGCLog$MemoryObject.<init>(MultiMajorGCLog.java:48)

  at jvm.MultiMajorGCLog.testMain(MultiMajorGCLog.java:34)

  at jvm.MultiMajorGCLog.main(MultiMajorGCLog.java:39)

Unable to create D:/D/myeclipse_dump.bin: File exists

Heap

 def new generation   total 14336K, used 10748K [0x02a00000, 0x03a00000, 0x03a00000)

  eden space 12288K,  87% used [0x02a00000, 0x0347f088, 0x03600000)

  from space 2048K,   0% used [0x03800000, 0x03800000, 0x03a00000)

  to   space 2048K,   0% used [0x03600000, 0x03600000, 0x03800000)

 tenured generation   total 4096K, used 3072K [0x03a00000, 0x03e00000, 0x03e00000)

   the space 4096K,  75% used [0x03a00000, 0x03d00010, 0x03d00200, 0x03e00000)

 compacting perm gen  total 12288K, used 2082K [0x03e00000, 0x04a00000, 0x07e00000)

   the space 12288K,  16% used [0x03e00000, 0x04008840, 0x04008a00, 0x04a00000)

No shared spaces configured.

package jvm;

public class MultiMajorGCLog
{

  public static void testMain()
  {
    try
    {
      Thread.sleep(40);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }

    MemoryObject object1 = new MemoryObject(1024 * 1024 * 3);
    MemoryObject object2 = new MemoryObject(1024 * 1024 * 3);
    MemoryObject object3 = new MemoryObject(1024 * 1024 * 3);
    MemoryObject object4 = new MemoryObject(1024 * 1024 * 2);
    System.out.println("Minor GC should happen");

    MemoryObject object5 = new MemoryObject(1024 * 1024 * 2);
    MemoryObject object6 = new MemoryObject(1024 * 1024 * 2);
  }

  public static void main(String[] args)
  {
    testMain();
  }

  private static class MemoryObject
  {
    private byte[] bytes;

    public MemoryObject(int objectSize)
    {
      this.bytes = new byte[objectSize];
    }
  }
}

 

分享到:
评论

相关推荐

    gc-7.2.tar.gz

    配置W3M时,用户可能需要调整与GC-7.2相关的参数,例如设置最大堆大小、启用并发垃圾回收等,这些可以通过修改W3M的配置文件或者在运行时传递参数实现。合理的配置可以进一步优化W3M的性能,使其在处理复杂网页时...

    JVM_GC_-调优总结.pdf

    - 当旧生代空间满时,触发大收集,由于涉及到所有存活对象,因此大收集速度较慢。 **2.4 永久代(Permanent Generation)** - **存储内容**: - 负责保存反射对象,例如描述类与方法的对象。 #### 三、性能调优 ...

    VisualGC.zip

    用户首先需要下载“VisualGC.zip”压缩包,其中包含的“com-sun-tools-visualvm-modules-visualgc.nbm”是VisualGC的插件安装文件。解压后,打开jvisualvm工具,依次选择“工具” -&gt; “插件” -&gt; “已下载”,然后...

    GC9306_DS_V1.01.pdf

    在进行GC9306 LCD驱动芯片的应用开发时,开发者需要仔细阅读数据表中的各项参数设置,以确保能够正确地配置芯片的各种功能,实现预期的显示效果。无论是在智能手机、平板电脑还是其他移动设备中,了解如何通过MCU...

    jvm gc分析工具gcviewer-1.36.jar

    对gc日志进行统计分析,使用命令:java -jar gcviewer-1.3x.jar gc.log summary.csv [chart.png] [-t PLAIN|CSV|CSV_TS|SIMPLE|SUMMARY]

    lcd_gc9503CV_mipi_YX.dtsi

    lcd_gc9503CV_mipi_YX.dtsi

    GC5025.tar.gz_RK camera_camera_gc5025 RK3368_gc5025驱动_rk摄像头驱动

    《GC5025.tar.gz:RK3368平台上的GC5025摄像头驱动详解》 在嵌入式系统开发中,摄像头驱动扮演着至关重要的角色,它连接硬件设备与软件应用,使得图像捕获和处理成为可能。本文将深入探讨针对RK3368平台的GC5025...

    SENSOR_GC1054.rar_1054-sensor_SENSOR_GC1054_gc1054

    标题中的"SENSOR_GC1054.rar_1054-sensor_SENSOR_GC1054_gc1054"暗示了我们正在处理一种名为GC1054的传感器,这可能是一款专用于图像处理的传感器。在IT行业中,这类传感器通常被应用于摄像头设备、机器视觉系统或...

    年轻代gc jvm crash

    1. **内存溢出**:如果年轻代的空间不足以容纳新分配的对象,或者Survivor区无法容纳从Eden区晋升的对象,就会触发Full GC。如果此时老年代也满了,就会出现`OutOfMemoryError`,导致JVM崩溃。 2. **性能问题**:...

    GC2093 CSP Datasheet Beta0.3 .pdf

    **GC2093 CSP Datasheet Beta0.3 .pdf** 文件主要介绍了一款由格科微(Galaxycore)公司推出的高动态范围(HDR)1080P CMOS图像传感器——GC2093。这款传感器设计用于安全摄像头、数码相机以及手机摄像头应用。以下...

    基因组二代测序数据GC校正diamagnetic.rar

    在某些区域,GC含量过高或过低可能导致测序效率下降,产生读取偏斜,使得数据分析时出现系统误差。 描述中提到的“配合本人博客使用和学习,https://blog.csdn.net/abcba101/article/details/102810927”,意味着这...

    gcViewer工具gcviewer-1.37-SNAPSHOT.jar

    gcViewer工具 gcviewer-1.37-SNAPSHOT.jar

    Sun Hotspot V1.6.0 JVM GC PPT.pdf

    - **To Space空间不足**:如果Minor GC时To Space空间不足以容纳存活对象,这些对象将直接晋升到旧生代。 - **大对象直接分配到旧生代**:可以通过`-XX:PretenureSizeThreshold`设置特定大小的对象直接分配到旧生代...

    visualgc.zip

    1. **堆内存监控**:显示堆内存的总大小、已用空间、空闲空间等信息,帮助开发者了解当前JVM内存压力,判断是否存在内存溢出的风险。 2. **年轻代与老年代分析**:展示新生代和老年代的内存使用情况,便于理解垃圾...

    gc5035_mipi_raw.rar

    总结,GC5035 MIPI RAW驱动在MTK平台Android 10.0上的实现,涉及了硬件接口、操作系统内核、用户空间API等多个层面的知识。理解并掌握这些技术细节,对于开发高效、稳定的移动设备摄像头应用至关重要。通过不断优化...

    GC2093-Beta0.3.rar

    GC2053 is a high quality 1080P CMOS image sensor, for security camera products, digital camera products and mobile phone camera applications. GC2053 incorporates a 1920H x 1080V pixel array, on-chip ...

    摄像头gc2145资料.rar

    摄像头GC2145是一种常见的数字摄像头芯片,广泛应用于各种监控设备、网络摄像头以及电脑摄像头等产品中。本文将深入探讨GC2145的核心知识点,包括寄存器初始化配置和数据手册,以及如何利用C语言进行编程。 一、GC...

    visualGC.zip

    首先,VisualGC能够展示堆内存的实时状态,包括新生代、老年代和持久代的大小、使用情况以及剩余空间。这对于识别内存泄漏或者理解对象生命周期是非常有用的。通过观察GC活动,我们可以发现可能的性能瓶颈,例如频繁...

    2019gc2000.rar

    《GC-PowerStation 2019中文版:SMT导坐标与GERBER文件处理详解》 GC-PowerStation是一款专业且功能强大的电子制造软件,主要用于SMT(表面贴装技术)工艺中的导坐标和GERBER文件处理。该软件以其高效、精准的特性...

    SC6533_GC6153_Driver_V0.3000.100_格科微gc61538w_GC6153_

    《SC6533_GC6153_Driver_V0.3000.100:格科微GC6153串口驱动详解》 在电子设备开发领域,驱动程序扮演着至关重要的角色,它是硬件设备与操作系统之间的桥梁,使得操作系统能够有效地控制和管理硬件。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics