zoukankan      html  css  js  c++  java
  • JVM内存管理中的垃圾回收策略

    JVM垃圾回收策略

    1.静态内存分配和回收

      编译时已经确定了内存空间大小,程序被加载后则一次性分配好内存空间.程序结束后,则对应栈帧撤销,分配的静态内存空间则被回收.

    2.动态内存分配和回收

      程序运行动态分配内存空间,回收时则由垃圾收集器负责.

    3.垃圾收集器

    A.正确的检测出垃圾对象(关键功能)

    B.释放垃圾对象占用的内存空间

    4.基于分代的垃圾收集算法(hostpot)

    算法设计思路:

      把对象按照寿命的长短进行分组(年轻代,年老代),新创建的对象分配在年轻代中,对象经过几次垃圾回收后,仍然存活的对象则划分到年老代中.年老代的收集不像年轻代那么频繁,这样就减少了每次垃圾收集时所要扫描的对象数量,从而提高了垃圾回收效率.

                               基于分代的对结构

          JVM将整个堆划分为Young区,Old区,Perm区,分别存放不同年龄的对象.

    • Young区:分为Eden区和Survivor区,新创建的对象都在Eden区,当Eden区满后会触发minorGC,将Eden区仍然存活的对象复制到其中一个Servivor区中,另外一个Servivor区中的存活对象也复制到这个Survivor中,以保证始终有一个Servivor区是空的.
    • Old区:Servivor区中对象存放不下后会触发minorGC,将存活的对象放入Old区,Servivor区中的对象足够老,会直接放入Old区.如果Old区满了后会触发FullGC,回收整个堆内存.
    • Perm区:这个地方存放的基本都是类的class对象,如果一个类被频繁的加载可能会导致Perm区满,Perm区的垃圾回收也是由FullGC触发的.

     Sun对堆中不同代大小给出的建议:

    一般建议Young区的大小为整个堆的1/4,而Young区中Survivor区一般设置为整个Young区的1/8
  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/fxust/p/7281395.html
Copyright © 2011-2022 走看看