GC

引用

引用分为强引用(Strong Referncel)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4种。引用强度依次逐渐减弱。

  • 强引用对象永远不会被垃圾回收器回收掉
  • 软引用在系统将要发生内存溢出前列入回收范围进行第二次回收,使用SoftReference类来实现。
  • 弱引用关联的对象只能生存到下一次垃圾收集发生之前。使用WeakReference类来实现。
  • 虚引用的唯一目的是能在对象被收集器收集时受到一个系统通知。使用PhantomReference。

finalize()

任何一个对象的finalize方法只会被系统自动建立的、低优先级的Finalizer线程执行一次


finalize()能做的所有工作,使用try-finally或其他方法都可以做的更好更及时。所以不建议使用finalize()

垃圾收集算法

标记-清除算法

  • 标记和清除两个过程效率都不高
  • 会产生大量碎片

复制算法

实现简单,运行高效

内存代价太高

多用于回收新生代新生代对象98%是“朝生夕死”的,不必按1:1划分内存

内存分为一块较大的Eden空间和两块较小的Survivor空间。Hotspot默认比例为8:1,只有10%内存会浪费。

标记-整理算法

用于老年代

Hotspot垃圾收集算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 90,090评论 17 311
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 11,208评论 2 31
  • 一. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对...
    Stan_Z阅读 5,946评论 0 25
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,852评论 3 83
  • 1. 垃圾回收的意义在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在...
    爱情小傻蛋阅读 4,481评论 0 11