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    永久代最大容量
  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/WardSea/p/7485717.html
Copyright © 2011-2022 走看看