zoukankan      html  css  js  c++  java
  • 垃圾收集器(GC)

    堆分区:所有new的对象都会存放在堆中

         > 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space;
         > 旧生代(Old Generation):存放生命周期长的对象
         > 持久代(Permenent Generation):用于存放class字节码等

     
    JVM使用的GC算法是:分代收集
         > 频繁的收集新生代
         > 较少的收集旧生代
         > 基本不收集持久代

     
    JVM的GC机制分为:Minor GC 和 Full GC
         > Minor GC: 即普通GC,负责收集新生代里所有对象,会把Eden里所有活着的对象复制到Survivor里,如果Survivor放不下,则把Survivor里活着的对象放入旧生代里
         > Full GC:会对新生代和旧生代进行收集,算法不同效率会低于GC。显式调用System.gc()时,就是进行Full GC。
         > 触发条件:Eden满了触发Minor GC;有新对象进入旧生代时,旧生代空间不足则进行Full GC

     
    JVM的清理算法:
         > 引用计数法(早期JVM):JVM会为对象的引用数进行计数,创建则添加,引用超出范围则删减,当计数为0时,则可以收集
         > 对象引用遍历:JVM会遍历所有根对象,根据对象图递归确定可到达对象,如果某对象实例可以从根对象到达,则将其标记,称为标记对象;在执行收集阶段,只需要简单的扫描堆栈,删除所有未标记对象即可。一般在之后还会进行压缩,以便为新的对象腾出空间。
      > 复制清理法

     
    JVM如何清理一个对象:
         > 新生代:采用复制清理法,扫描后把可到达的对象复制到未使用的区域,如survivor里,然后清楚Eden里所有对象
         > 旧生代:采用标记清理然后压缩,内容见对象引用遍历。
         > 机制:串行和并行两种,串行使用于单线程,单cpu;并行使用于多线程,多核cpu。
     

    调优:
         >使用调优:尽早将不用的对象赋值null,而不是等到退出生命周期自动赋值;少用finalize(),会增大GC工作量;当程序等待时,手动执行system.gc();
         >虚拟机优化选项:网上查询
  • 相关阅读:
    查看mysql服务器连接
    读懂MySQL执行计划
    学会MySQL索引
    记一个有趣的Java OOM!
    高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存
    如何优雅的使用mybatis
    禁止页面后退JS(兼容各浏览器)
    如何做一个对账系统
    centos7.2进入单用户模式修改密码
    linux系统引导流程
  • 原文地址:https://www.cnblogs.com/Pjson/p/8782937.html
Copyright © 2011-2022 走看看