java中的垃圾回收机制

来源:互联网 发布:java如何引用别的类 编辑:程序博客网 时间:2024/05/01 18:29

JVM内存管理采取分代的策略:
(1)年轻代(Young Gen)
中间包含一个Eden Space和两个Suvivor Space(S0,S1)
JVM为了加快GC回收速度,会在Eden区为每一个线程分配一个TLAB空间,用于存储线程独享的小对象。

(2) 老年代(Tenured Gen)

(3)持久代(Perm Gen)
就是方法区,存储class文件,具体包括:

  • 类的方法
  • 类的名称
  • 常量池

JVM的清理过程
(1)minorGC:
清理Eden,S0,S1

(2)majorGC
清理老年代

(3)FullGC
清理所有堆空间。
如下操作可能会触发Full GC

  • System.gc
  • promotion failed.Eden晋升到S0等情况下出现内存不足。

FAQ

java.lang.OutOfMemoryError:GC overhead limit exceeded
java内存溢出,简单而言就是内存不足了,因为是error,按照java异常机制最初设计直接程序就应该完蛋了。显然,这种情况不利于保存现场,所以,JVM定义了一个提前预测的内存不足的机制,并抛出该error。
你可以用catch(throwable e)来catch住该错误,但是,建议你只进行保存现场的的工作,然后退出程序。

原创粉丝点击