jvm虚拟机笔记<二> 垃圾回收与内存分配

确定对象已废弃需要两步:

  1. 利用可达性分析算法(与GC roots有关联——虚拟机栈中的对象,方法区静态对象,方法区常量对象,本地方法引用的对象)判断是否需要回收。
  2. 是否覆盖过finalize方法并执行:覆盖过可以“免死一次”。

引用的概念:

  • 强引用(Strong Reference):通常我们通过new来创建一个新对象时返回的引用就是一个强引用,若一个对象通过一系列强引用可到达,它就是强可达的(strongly reachable),那么它就不被回收
  • 软引用(Soft Reference):软引用可达的对象在内存不充足时才会被回收,因此软引用要比弱引用“强”一些
  • 弱引用(Weak Reference):若一个对象是弱引用可达,下一次垃圾回收时无论当前内存是否充足它都会被回收
  • 虚引用(Phantom Reference):虚引用是Java中最弱的引用,那么它弱到什么程度呢?它是如此脆弱以至于我们通过虚引用甚至无法获取到被引用的对象,虚引用存在的唯一作用就是当它指向的对象被回收后,虚引用本身会被加入到引用队列中,用作记录它指向的对象已被销毁。 (销毁时发送一个通知)

垃圾回收算法:

  • 标记-清除算法:把标记过的清除。
  • 复制算法:回收时把标记的复制一份,然后其他内存全部清除。
  • 标记-整理算法:把标记过的清除后整理。
  • 分代收集算法:分新生代与老年代选择回收算法——新生少量存活代使用复制,老年代对象存活率高6使用标记-清除(整理)。

 虚拟机提供了多种不同的垃圾收集器与调节参数

posted @ 2019-11-27 21:39  lvoooop  阅读(152)  评论(0编辑  收藏  举报