JVM内存管理(2)——自动内存管理机制

6 篇文章 0 订阅

注:本文只是列出jvm内存中包含的知识点,具体理解还需另行查找。

[1] 垃圾收集

垃圾收集需要完成的3件事情如下:

1)哪些内存需要回收?

 java堆和方法区

2)什么时候回收?

 垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象之中哪些还存活着,哪些已经死去。判断的算法有以下几种:

引用算法

   在对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不可能再被使用的。

  引用计数算法的实现简单,判定效率也很高,但它很难解决对象之间相互引用的问题,所以主流的Java迅疾里面没有选用引用计数算法来管理内存。

②可达性分析算法

 在主流的商用程序语言都是称可达性分析来判定对象是否存活的,这个算法的基本思路的通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。但真正宣布一个对象死亡,至少要经历两次标记过程:如果对象在分析中没有可达的引用链,则会被第一次标记并且进行筛选。如果对象由finalize()方法且未执行,则虚拟机会触发执行,若对象在此方法中重新与引用链上的任何一个对象关联上,则在第二次标记时便会被移除即将回收的集合。否则,就将真的回收。

如下图所示,object5、object6和object7就是不可用对象,会被判定为可回收对象。

 

Java语言中,可作为GC Roots的对象包括下面几种:

  1. 虚拟机栈中引用的对象

  2. 方法区中类静态属性引用的对象。

  3. 方法区中常量引用的对象

  4. 本地方法栈中JNI引用的对象。

    2)如何回收?

    垃圾收集的算法有以下几种:

    标记-清除算法

    即算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。

    这是最基础的收集算法。不足地方有两个。一是效率不高,二是清除后会产生大量不连续的内存碎片。

    复制算法

       将可用的内存按容量划分为大小相等的两块,每次只使用一块。当这一块的内存用完了,就将还存活的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。算法实现简单,运行高效,但代价是将内存缩小为原来的一半。

      现在的商业虚拟机都采用这种算法来回收新生代,但是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和一块Survivor空间,当回收时则把存活的对象复制到另一块survivor空间上。HotSpot默认的Eden和Survivor的大小比例是8:1.

    标记-整理算法

      标记过程与“标记-清除”算法一致,而整理过程则将所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

    分代收集算法

         一般将Java堆分为新生代和老年代。新生代中选用复制算法,而老年代采用“标记-清理”或“标记-整理”算法。

[2] 垃圾收集器

 HotSpotJDK1.7Update14之后,包含的所有收集器如下图所示(连线代表可搭配使用)

 

 直到现在为止还没有最好的收集器出现,也没有万能的收集器,使用时只考虑对具体应用最合适的收集器。

[3] 虚拟机性能监控与故障处理工具

  1. JDK命令行工具

    jps:虚拟机进程状况工具

    jstat:虚拟机统计信息监视工具

    jinfo:Java配置信息工具

    jmap:Java内存映像工具

    jhat:虚拟机堆转储分析工具

    jstack:Java堆栈跟踪工具

    HSDIS:JIT生成代码反汇编

  2. JDK的可视化工具

    ①JConsole:Java监视与管理控制台

    JConsole是一种基于JMX的可视化监视、管理工具。它管理部分的功能是针对JMX MBean进行管理。

    ②VisUalVM:多合一故障处理工具

    VisualVM是目前为止随JDK发布的功能最强大的运行监视和故障处理程序。VisualVM有一个很大的优点:不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能的影响很小,使得它可以直接应用再生产环境中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值