zoukankan      html  css  js  c++  java
  • 深入理解java虚拟机(3)垃圾收集器与内存分配策略

    一、根搜索算法:  

      (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象不可用

      (2)GC Roots对象包括这几种:虚拟机栈中引用的对象;方法区中的类静态属性引用的对象;方法区中常量的引用对象;本地方法中JNI的引用对象

    二、垃圾收集算法

        1.标记-清楚算法:

            (1)基本思想:首先标记出要回收的对象,在标记完后回收掉所有被标记的对象

            (2)缺点:第一是标记和清楚过程效率都不高;第二是标记清楚之后会山城大量的不连续的内存碎片。

        2.复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块,当一块内存用完了,就将还存活的对象复制到另一块上面,然后把已经使用过的内存空间进行一次清理  

            (2)优点:不考虑内存碎片使用情况,只要移动堆顶指针,按顺序分配内存就可以,实现简单,运行高效

              缺点:将内存缩小为原来的一半    

        3.标记-整理算法:

        4.分代收集算法:根据对象存活周期的不同将内存划分为几块。

            (1)将java堆分为新生代和老年代。在新生代中,每次垃圾收集的时候都发现大批对象死去,只有多少量的存活,使用复制算法,将少量存活对象复制到老年代就可以完成对象的收集,老年代中因为对象的存活率高、没有额外空间对他进行分配担保,需要使用,标记-清理来进行回收

            (2)将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,将Eden和Survivor中还存活的对象拷贝到另一块Survivor空间上,最后清理掉Eden和刚才使用过的Survivor的空间

          

  • 相关阅读:
    JAVA常见面试题之Forward和Redirect的区别
    springMVC学习笔记(二)-----注解和非注解入门小程序
    springMVC学习笔记(一)-----springMVC原理
    C语言关键字
    JAVA HASHMAP 如何用
    java中HashMap详解
    java中dao层和service层的区别是什么?
    到底DAO是什么?为什么要有它的存在?
    Ubuntu命令基础
    使用VMWare12.0安装Ubuntu系统
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9639561.html
Copyright © 2011-2022 走看看