美文网首页
JVM Garbage Collection策略

JVM Garbage Collection策略

作者: JohnShen | 来源:发表于2016-11-13 18:07 被阅读30次

JVM的内存结构

  • 程序计数器:线程私有。代表当前线程所执行字节吗的行号指示器
  • 虚拟机栈:线程私有。
  • 本地方法栈:线程私有。
  • Java堆:线程共享。
    -Xms=-Xmx可以避免堆的自动扩展
    -XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在内存溢出的时候dump出内存快照。
  • 方法区:线程共享。(永久代)
    存储已被虚拟机加载的类信息、常量、静态变量等。
    运行时常量池是方法区的一部分。
  • 直接内存

判定对象是否存活

  1. 引用计数法
    - 给对象添加一个引用计数器,每当有一个地方引用它时,计数加1;
    - 引用失效时,计数减1;
    - 计数为0时,可被回收。
    该方法不能解决对象相互循环引用的问题,即使它们都已失效。
  2. 可达性分析法
    通过一些称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,认为此对象是不可用的。
    可以作为GC Roots的对象包括:
    - 虚拟机栈(栈桢中的本地变量表)中引用的对象;
    - 方法区类静态属性引用的对象;
    - 方法区中常量引用的对象;
    - 本地方法栈中JNI引用的对象。

垃圾回收算法

  1. 标记-清除算法
    原理:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。
    缺点:容易产生内存碎片。
  2. 复制算法(现代的虚拟机实现基本都采用这种算法来回收新生代)
    原理:先把内存分为大小相等的二个部分,每次只使用其中的一块,当这一块内存回收时,就把还存活的对象规则的复制到另一块内存中,以此循环。
    缺点:需要复制,效率降低、浪费空间。
  3. 标记-整理算法
    原理:类似于标记-清除,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉端边界以外的内存。
  4. 分代收集算法
    原理:根据对象存活周期的不同将内存划分为几块。一般是java堆分为新生代和老年代,这样就可以根据各个年代的特点采用合适的收集算法。

回收方法区

方法区的垃圾回收主要回收两部分:废弃常量 和 无用的类。
-回收废弃常量和java堆中的对象非常类似。当没有对象引用它时即可回收。
-回收无用的类则比较苛刻,需满足:

  1. 该类所有的实例都已经被回收,即java堆中不存在该类的任何实例。
  2. 加载该类的ClassLoader已经被回收。
  3. 该类对应的java.lang.Class对象没有在任何地方被引用。

-- EOF --

相关文章

  • JVM Garbage Collection策略

    JVM的内存结构 程序计数器:线程私有。代表当前线程所执行字节吗的行号指示器 虚拟机栈:线程私有。 本地方法栈:线...

  • java(内存和gc)

    JVM内存和gc机制JVM内存 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收...

  • JVM--Garbage Collection

    垃圾回收(GC)一直是java语言的重中之重。 1 对象状态鉴别 1.1 标记对象是否可回收一般有两种算法: 引用...

  • JVM垃圾回收GC备忘

    概述 jvm垃圾回收通常叫做GC(Garbage Collection),java的优势很大程度上是因为JVM拥有...

  • Java面试题总结(下)

    JVM 底层 与 GC(Garbage Collection) 的面试问题 39) List、Set、Map 和 ...

  • java内存分析MAT

    Garbage Collection Roots A garbage collection root is an ...

  • GC Roots对象

    官方参考 Garbage Collection RootsA garbage collection root is...

  • JVM笔记八-堆参数调优

    JVM垃圾收集器(Java Garbage Collection)。本教程均在JDK1.8+HotSpot为例来讲...

  • 【JVM篇】【垃圾回收机制】

    【JAVA】【JVM篇】【垃圾回收机制】 1. 概述: 垃圾收集GC(Garbage Collection)是Ja...

  • JVM系列之GC

    JVM系列之GC 谈到JVM,大家都知道GC(Garbage Collection),GC这个话题说浅了就一句话-...

网友评论

      本文标题:JVM Garbage Collection策略

      本文链接:https://www.haomeiwen.com/subject/gnucpttx.html