JVM连杀

  1. 说说JVM的内存区域,各区域的作用

    1. Java虚拟机栈
      线程私有的,即平时所说的栈内存,描述的是Java方法执行的内存模型。每个方法从调用到执行完成都对应着一个入栈和出栈的过程。其中栈帧用于存储局部变量表(存放基本数据类型,对象引用等)、操作数栈、动态链接、方法出口信息等。
      可能会有StackOverFlow错误和OutOfMemoryError错误

    2. 本地方法栈
      线程私有的,同上,只不过对应的是调用的系统本地方法(Native Method)

    3. 程序计数器
      线程私有的,当前线程执行的字节码的行号指示器。Java虚拟机规范中唯一一个没有规定任何OutofMemoryError情况的区域。

    4. Java堆
      线程共享的,垃圾回收关注的区域。用于存放对象实例,几乎所有的对象实例都是在这分配内存。

    5. 方法区
      线程共享的,存储已被虚拟机加载的类信息、常量、静态变量等。
      运行时常量池就在此区域。

  2. 如果创建一个数组,JVM如何分配内存
    在堆中分配数组空间,数组内存的是实际对象的指针,数组内的对象是需要另外在堆中分配空间的。

  3. 什么时候进行垃圾回收

    1. 在新生代的Eden区满了,会触发新生代GC(Minor GC),经过多次触发新生代GC存活下来的对象就会升级到老年代,升级到老年代的对象所需的内存大于老年代剩余的内存,则会触发老年代GC(Full GC)
    2. 主动调用System.gc()的时候也可能会触发Full GC
  4. JVM垃圾回收的算法
    复制算法: 快速,但浪费内存
    标记-清除算法: 快速,但会产生空间碎片,不利于分配大对象
    标记-整理算法: 速度不及前两个快,但是无空间碎片
    分代收集算法: 将堆内存分为不同的区域,对不同的区域使用不同的垃圾回收算法。
    那么,分代是如何划分的? 如下:
    一般根据对象的存货周期不同将java堆分为新生代(Eden,From Survivor,To Survivor)和年老带。新生代中的对象大多存活期较短,每次能回收很多而存活的少,所以在新生代使用复制算法;年老代中的对象存活率高,则使用标记-整理算法或者标记-清除算法。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NUg1ZfIs-1574127278489)(https://images2015.cnblogs.com/blog/345531/201511/345531-20151115204320728-1210139023.png)]
    那么,为啥要将新生代分为Eden和Survivor呢,为啥还要两个Survivor呢。
    分为Eden和Survivor这是因为复制算法需要移动现有对象,需要将内存分为两个区域(这两个区域的占比和通过-XX:SurvivorRatio=8来配置,默认是8:1:1);将Survivor分成两个是为了保证,留给新对象分配空间的区域永远都是最大的Eden区。

  5. JVM的垃圾回收器有哪些,特性和原理是啥

    1. 串行垃圾回收器(Serial/Serial Old)
      使用单线程处理垃圾回收,实现容易效率高,但无法利用多处理器的优势,适合单处理机和小内存的的机器应用。
    2. 并行垃圾回收器(ParNew/Parallel Scavenge(适合注重吞吐量的)/Parallel Old)
      多线程进行垃圾回收
    3. 并发垃圾回收器(CMS)
      GC线程和应用线程并发执行(但是初始标记和二次标记时仍然需要Stop-the-World),大大缩短停顿时间,适合响应时间优先的应用
    4. G1回收器
      待补充
  6. 如何判断对象空间能否被回收
    JVM中使用的是可达性分析法来判断对象是否是存活的。其基本思想就是,通过一系列"GC Roots"对象作为起始点,从这些节点开始向下搜索,形成一条引用链;当一个对象到任何"GC Roots"都没有任何一条引用链的时候(即不可达),那么该对象就是不可用的,(且没有在finalize()方法中被引用)就可以被回收。那么哪些对象能作为"GC Roots"呢,有如下几种:

    1. 虚拟机栈中引用的对象
    2. 方法区中类静态属性引用的对象
    3. 方法区中常量引用的对象
    4. 本地方法栈中JNI引用的对象

    总结起来其实就是,当前程序运行中使用到的对象~

  7. 如何查看JVM的GC情况
    jstat -gc pid

    S0C:第一个幸存区的大小
    S1C:第二个幸存区的大小
    S0U:第一个幸存区的使用大小
    S1U:第二个幸存区的使用大小
    EC:伊甸园区的大小
    EU:伊甸园区的使用大小
    OC:老年代大小
    OU:老年代使用大小
    MC:方法区大小
    MU:方法区使用大小
    CCSC:压缩类空间大小
    CCSU:压缩类空间使用大小
    YGC:年轻代垃圾回收次数
    YGCT:年轻代垃圾回收消耗时间
    FGC:老年代垃圾回收次数
    FGCT:老年代垃圾回收消耗时间
    GCT:垃圾回收消耗总时间
    
  8. 虚拟机类加载机制

    1. 何时加载
      从java编写层面理解的话:

      1. 一般就是new实例化对象的时候;
      2. 使用了一个类的静态字段的时候;
      3. 调用类的静态方法的时候;
      4. 使用反射相关调用的时候;
      5. 初始化类的时候如果其父类没有初始化的时候会先触发父类的初始化;
    2. 加载流程
      加载–>验证–>准备–>解析–>初始化–>使用–>卸载

    3. 双亲委派模式
      如果一个类加载器收到了类加载的请求,它会把这个请求委托给父类加载器去完成,只有当父类加载器反馈说无法加载这个类时,才会自己去加载这个类。
      当前JAVA加载器结构:
      Bootstrap Classloader <-- Extension Classloader <-- Application Classloader <-- User Classloader
      Bootstrap Classloader(启动类加载器):C++实现,在java里无法获取,负责加载/lib下指定的类
      Extension Classloader(扩展类加载器):java实现,负责加载lib/ext目录下的类
      Application Classloader(应用程序类加载器):用于加载classpath上指定的类库

      双亲委派模式的破坏:

      1. JNDI的实现
      2. OSGI的实现
        参考: 浅谈双亲委派和破坏双亲委派
  9. JMM模型
    定义了程序中各个变量的访问规则,其规定所有的变量(此变量非java中说的变量,指的是非线程私有的,eg 类属性对象,静态字段等)都存储在主内存中,每条线程还有自己的工作内存线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,对应定义了八个操作:

    lock: 作用于主内存的变量,把一个变量标识为一条线程独占状态。
    unlock: 作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
    read: 作用于主内存变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用
    load: 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。
    use: 作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。
    assign: 作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
    store: 作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作。
    write: 作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpMX14AQ-1574127278489)(data:image/png;base64,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iGx1Skp/+tc9dtY95lWuvyulspOC3al7Up82mK4ntlLj/Y/WKlq3fuvFQj+5KXXHm/oBwOMjSHVAn8ZxQneUv79PqjBMJyJiOGfG1fTf23CCo/HHt5PzPcVwgor3NxdRtGhssxpzh85AhAKAggb+uOQv1Gto7L00Tt16z8frf4QSVOiOhruP3FBdxUOdwa9M6/raBH39XB1CE3RFgy1FkGqZ9t67Q755hAjVS4AeGBcAAAJqSURBVPzKtK6vTdDXz9UhNEFXNNhSDO11FeM4AAC0jrP2AAAANBGkAAAANBGkAAAANDUzR+qeFwMEAAB4EA0EKaYkAwCA58TQHgAAgCYuf4CGMc4LAHgeBCk0jKFeAMDzYGgPAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABAE0EKAABA039tbwAAtEAp1fYmAOgDghSApxNFUdubAKAnGNoDAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQRJACAADQ9F/bGwAAQH8opdreBNyViqKo7W0AAADoJIb2AAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANBGkAAAANP0f7j3Q9KJELeYAAAAASUVORK5CYII=)]

    并定义了各操作的使用顺序和对应的约束规范,此处不细说,简化成如下happens-before规则:
    如果两个操作之间的关系不在此列,并且无法从下列规则推导出来的话,它们就没有顺序性保障,虚拟机可以对它们进行随意地重排序。

    程序次序规则:在一个线程内,按照程序代码顺序,书写在前面的操作先行发生于书写在后面的操作。准确地说应该是控制流顺序而不是程序代码顺序,因为要考虑分支、循环结构。
    管程锁定规则:一个unlock操作先行发生于后面对同一个锁的lock操作。这里必须强调的是同一个锁,而”后面“是指时间上的先后顺序。
    volatile变量规则:对一个volatile变量的写操作先行发生于后面对这个变量的读取操作,这里的”后面“同样指时间上的先后顺序。
    线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作。
    线终止规则:线程中的所有操作都先行发生于对此线程的终止检测,我们可以通过Thread.join()方法结束,Thread.isAlive()的返回值等作段检测到线程已经终止执行。
    线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生,可以通过Thread.interrupted()方法检测是否有中断发生。
    对象终结规则:一个对象初始化完成(构造方法执行完成)先行发生于它的finalize()方法的开始。
    传递性:如果操作A先行发生于操作B,操作B先行发生于操作C,那就可以得出操作A先行发生于操作C的结论。

    参考
    jmm
    《深入理解Java虚拟机 JVM高级特性与最佳实践》

//todo: 内存分配与回收策略

未完待续

发布了37 篇原创文章 · 获赞 58 · 访问量 16万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览