垃圾回收流程
首先新对象会存放在Eden区,
- 如果Eden区存不下,将触发一次minor GC,将存活的对象移动到Survior区。
- 如果Survior区不够的话,会向老年代发送请求,查询老年代的内存是否足够,
- Survior区要是够的话,将存活区的存活时间比较长的对象存到老年代,然后将Eden区的存活时间比较长的存到存活区,将新创建的分配搭到Eden区。
- 若空间仍不够,触发一次full GC,重复操作。
- 若最后空间仍不足,抛OutOfMemoryError异常。
- 如果Survior区不够的话,会向老年代发送请求,查询老年代的内存是否足够,
概述
首先新对象会存放在Eden区,若Eden区存不下,将触发一次minor GC,将存活的对象移动到Survior区,如果Survior区不够的话,会向老年代发送请求,查询老年代的内存是否足够,要是够的话,将存活区的存活时间比较长的对象存到老年代,然后将Eden区的存活时间比较长的存到存活区,将新创建的分配搭到Eden区。若空间仍不够,触发一次full GC,重复操作,若最后空间仍不足,抛OutOfMemoryError异常。
当一个对象被实例化后,首先先尝试存在eden区,若Eden区存不下,将触发一次minor GC,若空间不够,则看存活区的空间是否够,要是够的话,将Eden区的存活时间长的对象放到存活区,将新创建的对象分配到Eden区,要是不够的话,看老年代的空间是否够,要是够的话,将存活区的存活时间比较长的对象存到老年代,然后将Eden区的存活时间比较长的存到存活区,将新创建的分配搭到Eden区。若空间仍不够,触发一次full GC,重复操作,若最后空间仍不足,抛出异常。