JVM的分代垃圾收集算法及OOM

Java 内存类型分为:
Heap
Permanent
Stack
其中Heap
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
Heap分为:
a.新生代(young generation):新生代又被分为两块: Eden Space和Survivor spaces新建的大部分对象存放在Eden Space
b.旧生代(tenured generation又成old):存放新生代中经过多次垃圾回收仍然存活的对象,新建对象也
有可能存在,像大的数组对象,且成员中无引用外部对象
[Eden ['i:dn] n. 伊甸园, 乐园,tenured ['tenjuə]终身占用 ]

其中的Permanent Generation (non-heap)
保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。JVM共享这些类数据。
这个区域被分割为只读的和只写的,
另外
Code Cache (non-heap)
HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)分区
OOM内存溢出:
如果JVM里运行的程序, 它的heap space和perm gen都满了,这个时候程序还企图创建新的对象实例的话,jvm gc就会启动,试图释放足够的内存来创建这个对象。这个时候如果gc无法释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误。
垃圾收集类型:
MinorGC局部垃圾收集(新生代垃圾收集)
FullGC全局垃圾收集 对新生代、旧生代及持久代都进行GC,此时JVM停止对外相应,CPU占用率变高。
FullGC原因:
1、旧生代空间不足触发Full GC
2、CMS GC失败触发的Full GC
3、统计得到的MinorGC晋升到旧生代的平均大小 大于旧生代的剩余空间
CMS:Concurrent Mark-Sweep GC(执行时间和应用并发进行),参数:-XX:+UseConcMarkSweepGC
注:CMS执行过程大部分时候是和应用并发进行,相比并行GC,CMS GC需要执行三次mark,GC总耗时较长,但执行GC的时间被缩短
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值