zoukankan      html  css  js  c++  java
  • 秋招之路7:全面JVM

    jvm全景图

    其中蓝色区域是线程独有的,黄色区域是线程共享的

    分析方法

    javap 命令 javap -c 可以对代码进行反汇编
    

    里面的各种指令,可以用jvm指令手册一个一个查

    一个线程的全景图


    程序计数器:和计组一样,是存放下一条指令所在单元的地址的地方。

    栈帧:一个方法对应一块栈帧内存区域。放自己方法里面各种变量用的。
    其中局部变量表一般是放局部变量。操作数栈,一般是放操作过程中的常量。
    局部变量表中的对象,存的是对象的地址,对象数据存在堆空间中。
    动态链接:将符号引用转换为直接引用。[dai gan]

    本地方法栈:一般是本地的native方法。

    堆内存回收图

    流程:
    当Eden区满了后,GC收集Eden区,没有被收集的对象,分代年龄+1,进入From区;
    下一次Eden区满后,GC收集Eden区和From区,没有被收集的对象,分代年龄+1,进入To区;
    下一次Eden区满后,GC收集Eden区和To区,没有被收集的对象,分代年龄+1,进入From区;
    ...
    直到有分代年龄为15的对象,进入到老年代。
    当老年代满了后,开始Full GC[比较耗时].

    分析内存情况的工具

    jvisualvm:jdk自带的一个工具,然后可以安一个visual GC的插件。

    名词

    GC:垃圾收集器
    Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非常短暂。
    Major GC/Full GC:老年代GC,对整个堆进行垃圾收集

    可达性分析算法

    算法的基本思想:通过一系列的称之为“GC ROOTs”的对象作为起点,从这些起点开始向下搜索。
    找到的对象都标记为非垃圾对象;其余对象标记为垃圾对象。
    GC ROOTs根节点:线程栈的本地变量,静态变量,本地方法栈的变量等等。

    jvm调优

    主要调优在堆上,也有部分调优在方法区
    目的:减少full GC的次数,减少每次full GC的执行时间。
    需要

    各种场景分析,具体垃圾收集器,垃圾收集算法进行分析。

    一种分析方法:GC日志

  • 相关阅读:
    创建字典的方法
    python中,a=10.0 b=10.0 a is b 为什么输出是false
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    二十三种设计模式及其python实现
    python字符串替换的2种方法
    数据库索引的实现原理?
    异步IO数据库队列缓存RabbitMQ队列
    Python 如何用列表实现栈和队列?
    Python数据结构与算法?
    django -----原生SQL语句查询与前端数据传递?
  • 原文地址:https://www.cnblogs.com/whyaza/p/12333594.html
Copyright © 2011-2022 走看看