Java虚拟机与GC

Java内存区域
        1.程序计数器(Program Counter Register)(线程私有的)
        2.Java虚拟机栈 (Java Virtual Machine Stacks)(线程私有的)
        3.本地方法栈 (Native Method Stack)(Native方法)
        4.Java堆 (Java Heap)(线程共享)
        5.方法区 (Method Area)
        6.常量池 (Runtime Constant Pool)
        7.直接内存 (Direct Memory)(不是java虚拟机规范定义的内存区域)

对象的创建
         为对象分配空间
            指针碰撞(Bump the Pointer) —— Serial、ParNew等带Compact过程的收集器gc
            空闲列表(Free List) —— CMS基于Mark-Sweep算法的收集器


对象的访问定位
         1.句柄访问
        2.直接指针访问
     句柄访问
        优势:reference中存储的是稳定的句柄地址,对象被移动reference不需要改变
            
                 通过句柄访问对象

     直接指针访问
           优势:速度更快,节省了一次指针定位的时间开销
            
                 通过直接指针访问对象


JVM内存参数:
        堆的最小值:-Xms
        堆的最大值:-Xmx
        新生代容量:-Xmn
        栈内存容量:-Xss
        常量池的最小值:-XX:PermSize
        常量池的最大值:-XX:MaxPermSize
        DirectMemory容量:-XX:MaxDirectMemorySize

编译时间和垃圾回收时间
        Hot Spot Code 编译热点代码


GC垃圾回收
    
    Full GC
    Minor GC

        引用计数算法
        可达性分析算法 GC Roots开始,不可达则证明不可用
                强引用,软引用,弱引用,虚引用;
                两次标记
         垃圾回收算法:
                标记—清除算法(Mark-Sweep)
                复制算法(Coping)  Eden空间和Survivor空间
                标记—整理算法(Mark-Compact)
                分代收集算法(Generational Collection)

         垃圾收集器
             Serial收集器                            单线程的、JDK1.3.1之前的 、Stop The World
            ParNew收集器                         Serial的多线程版本、新生代
            Parallel Scavenge收集器        新生代收集器、使用复制算法、可控制的吞吐量
            Serial Old收集器                     老年代,单线程、标记-整理算法
            Parallel Old收集器                  Parallel Scavenge的老年代版本、多线程、标记-整理算法
            CMS收集器                              并发收集、低停顿时间、标记-清除算法
            G1收集器                                 并行与并发、分代收集、空间整合、可预测停顿


JDK监控命令行工具:
         jps:虚拟机进程状况工具                jps -l
        jstat:虚拟机统计信息监控工具       jstat -gc 2372 20
        jinfo:Java配置信息工具                jinfo -flag CMSInitiatingOccupancyFraction 2372
        jmap:Java内存映射工具               jmap -dump:format=b,file=eclipse.bin 2372
        jhat:虚拟机堆转储快照分析工具    jhat eclipse.bin        然后在浏览器中输入localhost:7000查看
        jstack:Java堆栈跟踪工具              jstack -l 2372

    JConsole工具
    VisualVM工具




猜你喜欢

转载自blog.csdn.net/ningdunquan/article/details/50602990