JVM学习笔记20190119

各种引用关系概念:

强引用

Object obj = new Object();

软引用 softReference

一些有用但是并非必须,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收

如果说这些对象被回收之后,还是超出内存,就会抛出OOM异常

弱引用 WeakReference

一些有用但是并非必须,用弱引用关联的对象,这些对象有用的程度比软引用更低

扫描二维码关注公众号,回复: 5041933 查看本文章

这些对象只能生存到下次垃圾回收之前,GC发生的时候,不管内存是否足够,都会被回收

虚引用 PhantomReference

最弱的引用关系,被垃圾回收的时候收到一个通知

GC什么时候进行回收?

1. 执行 system.gc()的时候

2.老年代空间不足,一次Full GC 之后,然后不足 会触发 java.outofmemoryError:java heap space

3.永久代空间不足 永生代或者永久代, java.outofMemory PerGen Space

4. minor之后 survior放不下,放入老年代,老年代也放不下,触发FullGC, 或者新生代有对象放入老年代,老年代放不下,触发FullGC

5.新生代晋升为老年代时候,老年代剩余空间低于新生代晋升为老年代的速率,会触发老年代回收

6. new 一个大对象,新生代放不下,直接到老年代,空间不够,触发FullGC

GC怎么进行回收?

GC算法

标记-清除算法(Mark-Sweep)

复制算法(Copying)

标记-整理算法(Mark-Compact)

实际使用时,把算法们都用上,分代使用

90%以上的对象是朝生夕死的

新生代:采用复制算法

1个Eden

2个Survivor

Eden:Survivor:Survivor = 8:1:1

老年代:存活超过一定时间的,超过一定GC次数的

新生代的垃圾回收叫 minor gc

老年代的垃圾回收叫 full gc

猜你喜欢

转载自blog.csdn.net/u010016770/article/details/86566151