java虚拟机(五)--jvm启动参数设置

选项效果
-Xms<>M堆初始大小
-Xmx<>M堆最大大小
-Xmn<>M堆中年轻代的大小
-XX:DisableExplicitGC禁用System.gc()
查看GC日志
选项效果
-XX:+PrintGCDateStampsGC操作时间戳
-XX:+PrintGCDetailGC更详细的细节
-XX:+PrintGCApplicationConcurrentTime在应用程序仍然运行的情况下用在GC的时间

对象内存分配规则在第六篇中有解释。

在jdk 1.8的环境下:

虚拟机参数:
-Xms20M
-Xmx20M
-Xmn10M
-XX:+PrintGCDetails
-XX:SurvivorRatio=8
    public static int _1mb=1024*1024;
    public static void main(String[] args) {
        byte[] a1,a2,a3,a4;
        a1=new byte[2*_1mb];
        a2=new byte[2*_1mb];
        a3=new byte[2*_1mb];
        a4=new byte[4*_1mb];
    }

GC日志信息

[GC (Allocation Failure) [PSYoungGen: 6428K->728K(9216K)] 6428K->4832K(19456K), 0.0073317 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
Heap
 PSYoungGen      total 9216K, used 7193K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
  eden space 8192K, 78% used [0x00000000ff600000,0x00000000ffc50710,0x00000000ffe00000)
  from space 1024K, 71% used [0x00000000ffe00000,0x00000000ffeb6030,0x00000000fff00000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 10240K, used 4104K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  object space 10240K, 40% used [0x00000000fec00000,0x00000000ff002020,0x00000000ff600000)
 Metaspace       used 3487K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 386K, capacity 388K, committed 512K, reserved 1048576K

给a3分配内存时,eden space(有2.4M的空间TLAB等系统jvm创建的对象,此时占用了2.4+2+2=6.4,剩余1.6)空间不足,所以触发GC。把对象a1,a2(幸存代放不下)移到老年代,然后剩余的一些对象迁移到新生代中的幸存代。a3放到新生到EDEN区,a4也是
最终新生代用了(6+2.4)M,老年代用了4M。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值