• JVM知识点汇总


    1. 如何判断对象存活或死去

        (引用计数算法,可达性分析算法)

    2. 引用计数(优缺点)

          缺点:相互循环引用

        

    3. 可达性分析(GC Roots包含哪些,能过哪种数据结构遍历对象)

          可作为GC Roots的对象:

           虚拟机栈(栈帧中的本地变量表)中引用的对象。

           方法区中类静态属性引用的对象。

           方法区中常量引用的对象。

           本地方法栈中JNI(即一般说的Native方法)引用的对象  

    4. 引用的分类(强引用,软引用,弱引用,虚引用)

    5. System.gc()finalize()方法的作用,何时执行

          finalize()GC在回收对象之前调用该方法, 不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法

    6. 方法区何时回收,如何回收

          主要回收两部分内容:废弃常量和无用的类

          无用的类需要满足3个条件:

           1)该类所有的实例都已经被回收,即Java堆中不存在该类的任何实例;

           2)加载该类的ClassLoader已经被回收;

           3)该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

    7. 垃圾回收算法(标记清除,复制,标记整理,分代收集)

        标记清除:

        对可回收对象进行标记,gc时候进行清除

        缺点:效率不高,容易产生内存碎片

        复制:

         把内存一分为二,使用其中一部分,等这一部分使用完,把存活对象复制到另一部分

         分为eden和两个survivor,eden:survivor=8:1

         缺点:内存利用率不高,当gc时存活对象较多时,效率低,空闲的survivor内存不够时,需要老年代分担

        标记整理:

          对可回收的对象进行标记,把存活对象往一端移动,然后直接掉端边界以外的内存。

        分代收集

         把内存分为新生代和老年代

         新生代对象生命周期短可以使用复制算法,老年代对象存活率高可使用标记整理算法。   

    8. Eden空间,Survivor空间的作用,默认比例多少。8:1

    9. GC Roots如何枚举(OopMap,

    10. GC什么时候触发,解发时如何让所有线程暂停 (设置安全点或者安全区域)

    11. Serial收集器

      serial收集器

      单线程收集器,暂停所有线程,新生代使用复制算法,老年代使用标记-整理算法。

      适用运行在client环境下jvm.

    12. Parnew收集器(如何配置收集的线程数量)

      parNew收集器

      serial收集器多线程版本。  

      server模式下新生代收集器。

      并行:多条垃圾收集线程并行工作,用户线程暂停

      并发:用户线程与垃圾收集线程同时执行

    13. 并行和并发的区别

        并行是多个垃圾收集线程同时工作还是要stop the world.

    并发是垃圾收集器与用户线程同时工作。

    14. Parallel Scavenge(如何设置最大垃圾收集停顿时间,和吞吐量大小,作用)

      parallel scavenge收集器:(平行清除)

      新生代垃圾收集器(复制算法)

      -XX:MaxGCPauseMillis(最大停顿时间) -XX:GCTimeRatio (吞吐量大小)

       parNew收集器的最大区别:自适应调节策略

    15. Serial Old收集器

       Serial Old(PS MarkSweep)收集器:

      serial收集器老年代版本, 单线程收集器,暂停所有线程,新生代使用复制算法,老年代使用标记-整理算法。

      适用运行在client环境下jvm.sever模式下使用cms收集器的backup.

    16. Parallel Old收集器

        Parallel Old垃圾收集器是Parallel Scavenge收集器的老年代版本;

    JDK1.6中才开始提供, "-XX:+UseParallelOldGC":指定使用Parallel Old收集器

    特点:

    针对老年代

    采用"标记-整理"算法

            多线程收集

    17. Cms收集器(初始标记,并发标记,重新标记,并发清除)优缺点.

       CMS收集器

      以获得最短回收停顿时间为目标的收集器。使用标记-清除算法

      步骤(初始标记,并发标记,重新标记,并发清除)  

      特点:并发收集,低停顿

    优点:

    1:并发收集,低停顿

    缺点:

    会占用部分cpu资源,影响系统总的吞吐量,当cpu核数不足4个时,垃圾收集cpu负载比较大

    垃圾收集与用户线程并行处理,容易产生浮动垃圾

    使用标记-清除算法,容易产生内存碎片

    18. G1收集器

    优点:

    并行与并发

    分代收集

    空间整合

    可预测的停顿

    步骤:初始标记,并发标记,最终标记,筛选回收

    垃圾收集器重要参数含义(UseSerialGC,UserParNewGC,UseConcMarkSweepGC

    UseSerialGC:虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old收集器组合进行内存回收

    UserParNewGC:使用Parnew+Serial Old收集器组合进行内存回收

    UseConcMarkSweepGC:使用Parnew+CMS+Serial Old收集器组合进行内存回收.Serial Old收集器为CMSbackup.

  • 相关阅读:
    配置的三种方式
    处理多余的参数
    python3 flask 文件下载服务器
    .../..../.-/-../---/.--/.../---/-.-./-.-/...
    ubuntu 支持salsa20 and chacha20
    centos7下载安装 libsodium
    mqtt 连接测试
    模版传递参数后,前端显示$#39
    response 中 mimetype 的常用属性
    Flask_Restful 渲染模版
  • 原文地址:https://www.cnblogs.com/tom-plus/p/14047234.html
Copyright © 2020-2023  润新知