zoukankan      html  css  js  c++  java
  • JVM(二)GC

    GC简介
    Java堆内存
    在运行时,java的实例被存放在堆内存区域。当一个对象不在被引用,满足条件就会从堆内存移除并且内存空间被回收。堆内存由三个主要区域
    1.新生代
        Eden空间(任何实例都通过Eden空间进入运行时内存区域)
        S0 Survivor(存在时间久的实例将会从Eden空间移动到S0 Survivor空间)
        S1 Survivor空间(存在时间更长的实例将会从S0 Survivor空间移动到S1 Survivor)
    2.老年代
        实例将从S1提升到Tenured(终身代)
    3.永久代(现已被删除,元信息存放在方法区)
        包含类、方法等细节的元信息
     
    Java垃圾回收过程
    Java垃圾回收是一项自动化的过程,用来管理程序所使用的运行时的内存。通过GC,JVM解除了程序员在程序中分配和释放内存资源的开销
    1.启动垃圾回收
        作为自动化过程,程序员不需要在代码中显示地启动垃圾回收过程。System.gc()和Runtime.gc()用来请求JVM启动垃圾回收。
        启动由JVM负责,JVM可以拒绝这个请求,主要取决于堆内存中Eden是否可用。
        
    2.Java垃圾回收过程
        垃圾回收是一种回收无用内存空间并使其对未来实例可用的过程。
        新生代(Eden-->S0-->S1)-->老年代(老年代是实例生命周期的最后阶段,如果实例不再被引用,那么它们会被标记为回收)
     
    垃圾回收中实例的终结
    在释放一个实例和回收内存空间之前,GC会调用实例各自的finlize()方法,从而该实例有机会释放所持有的资源    
        
    对象什么时候符合垃圾回收的条件?
    • 所有实例都没有活动线程访问
    • 没有被其它任何实例访问的循环引用实例
    在编译过程中,java编译器能选择给实例赋null值,从而标记实例为可回收    
     
    垃圾回收的类别
    java中有四种类型的垃圾回收器
    1.串行垃圾回收器
    2.并行垃圾回收器
    3.并发标记扫描垃圾回收器
    4.G1垃圾回收器
     
    1.串行垃圾回收器
        它只使用一个单独的线程进行垃圾回收,通过冻结所有应用程序线程进行工作,所有可能不适合服务器环境。它最适合的是简单的命令行程序。
        JVM参数 -XX:+UseSerialGC可以使用串行垃圾回收器
        
    2.并行垃圾回收器
        它是JVM默认的垃圾回收器,它使用多线程进行垃圾回收。它也会冻结所有的应用程序线程当执行垃圾回收的时候。
     
    3.并发标记扫描垃圾回收器
        多线程进行。只会在下面两种情况下持有应用程序所有线程
        1)当标记的引用对象在老年代
        2)在进行垃圾回收的时候,堆内存的数据并发改变。
        相比并行垃圾回收器,并发标记扫描垃圾回收器使用更多的CPU来确保程序的吞吐量。如果我们可以为了更好的程序性能分配更多的CPU,那么并发标记上扫描垃圾回收器是更好的选择。
        JVM参数 XX:+UseParNewGC
        
    4.G1垃圾回收器
        适用于堆内存很大的情况,它将堆内存分割成不同的区域,并发的进行垃圾回收,它会优先选择垃圾最多的区域。
        JVM参数 -XX:+UseG1GC
        
    GC优化配置(下一章详解)
        -Xms             初始化堆内存大小
        -Xmx             堆内存最大值
        -Xmn             新生代大小
        -XX:PermSize     初始化永久代大小
        -XX:MaxPermSize    永久代最大容量
  • 相关阅读:
    计算机系统概述
    Qt学习--初学注意事项
    Qt实现一个简单的TextEditor
    Qt 用户登录界面
    C++ 模板
    多态与虚函数
    继承与派生
    C++ 运算符重载
    web安全-点击劫持
    web安全问题-cookie
  • 原文地址:https://www.cnblogs.com/WardSea/p/7485717.html
Copyright © 2011-2022 走看看