zoukankan      html  css  js  c++  java
  • 分代回收算法

    对象分类

        这种算法并不是一种新的算法,而是根据对象的存活周期的不同而将内存分为几块,分别是新生代、老年代和永久代。

    新生代:朝生夕灭的对象(例如方法的局部变量等);

    老年代:存活的比较久但还是要死的对象(例如缓存对象、单例对象等);

    永久代:对象生成后几乎不灭的对象(例如加载过的类信息);

    内存区域

        新生代和老年代都在Java堆,永久代在方法区。

    Java对象的回收

        新生代:采用复制算法,新生对象一般存活率较低,因此可以不使用50%的内存空间作为空闲,一般的使用两块10%的内存。

        作为空闲和活动区间,而另外80%的内存则是用来给新建对象分配内存的。一旦发生GC,将10%的活动区间与另外80%中存活的对象转移到10%的空闲空间,接下来,将之前90%的内存全部释放。以此类推,如图所示:

    堆大小=新生代+老年代,新生代和老年代的比例为1:2,新生代细分为一块交大的Eden空间和两块较小的Survivor空间,分别被命名为from和to。

    老年代:老年代中使用标记-清除或者标记-整理算法进行垃圾回收,回收次数相对较少,每次回收时间比较长。

    方法区对象回收

        永久代指的是虚拟机内存中的方法区,永久代垃圾回收 比较少,效率也比较低,但也必须进行垃圾回收,否则永久代内存不够用时仍然会抛出OutOfMemoryError异常。永久代也使用标记-清除或标记-整理算法进行垃圾回收。

  • 相关阅读:
    把excel导入的自定义时间改成yyyyMMdd
    sql多表查询时怎么获取查到的字段
    select 和 input 的不可编辑,input隐藏
    关闭dialog(lhgdialog)
    ajax 和 post 传多个参数值具体怎么写
    弹出提示框,对话框
    function方法中this的用法
    combobox获取值
    easyui-panel 滚动条禁用
    字符串用逗号隔开;有逗号的字符串遍历
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602188.html
Copyright © 2011-2022 走看看