gc 收集算法
1.引用计数法(Reference Counting Collector)
2.tracing算法(Tracing Collector) 或 标记-清除算法(mark and sweep)
3.compacting算法 或 标记-整理算法
4.copying算法(Compacting Collector)
5.generation算法(Generational Collector)
Java引用级别
级别 | 什么时候被垃圾回收 | 用途 | 生存时间 |
---|---|---|---|
强引用 | 不会被回收 | 正常用途 | jvm停止运行 |
软引用 | 内存不足时 | 内存敏感的高速缓存,比如网页缓存、图片缓存等 | 内存不足时终止 |
弱引用 | gc的时候 | 缓存 | gc的时候 |
虚引用 | 为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。 |
gc收集器
Serial收集器(复制算法)
新生代单线程收集器,标记和清理都是单线程,优点是简单高效。
Serial Old收集器(标记-整理算法)
老年代单线程收集器,Serial收集器的老年代版本。
**ParNew收集器(停止-复制算法) **
新生代收集器,可以认为是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现。
Parallel Scavenge收集器(停止-复制算法)
并行收集器,追求高吞吐量,高效利用CPU。吞吐量一般为99%, 吞吐量= 用户线程时间/(用户线程时间+GC线程时间)。适合后台应用等对交互相应要求不高的场景。
Parallel Old收集器(停止-复制算法)
Parallel Scavenge收集器的老年代版本,并行收集器,吞吐量优先
CMS(Concurrent Mark Sweep)收集器(标记-清理算法)
高并发、低停顿,追求最短GC回收停顿时间,cpu占用比较高,响应时间快,停顿时间短,多核cpu 追求高响应时间的选择