JVM小结

2021/6/15 10:51:17

本文主要是介绍JVM小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

常见的几个面试问题

  1. 请你谈谈你对jvm(java虚拟机)的理解,java8虚拟机与之前相比的变化
    在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。

    Java8新特性之虚拟机的改变:撤销了永久带,引入了元空间
    Java7和Java8的区别

  2. 什么是OOM,什么是栈溢出,怎么分析?

  • 尝试扩大堆内存看结果
  • 分析内存,看一下哪个地方出了问题
    内存快照分析工具:Jprofiler,MAT(eclipse)
    Jprofiler作用:分析Dump内存文件,快速定位内存泄漏;获得堆中的数据,获得大的对象
    详细解释OOM
  1. JVM常用调优参数有哪些?
    堆内存调优:VMoptions
    (1) -Xms:初始堆大小,默认是物理内存的1/64。默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到–Xmx的最大限制。例如:-Xms 20m。
    (2) -Xmx:最大堆大小。默认是物理内存的1/4 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
    (3) -XX:NewSize=n:设置年轻代大小(初始值)
    (4) -XX:MaxNewSize:设置年轻代最大值
    (5) -XX:NewRatio=n:设置年轻代和年老代的比值
    (6) -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值
    (7) -XX:PermSize(1.8之后改为MetaspaceSize) 设置持久代(perm gen)初始值,默认是物理内存的1/64。
    (8) -XX:MaxPermSize=n:(1.8之后改为MaxMetaspaceSize)设置最大持久代大小。
    (9) -XX: +PrintGCDetails -->打印GC垃圾回收信息
    (10)-XX: +HeapDumpOnOutOfMemoryError -->oom DUMP

  2. 内存快照如何抓取,如何分析Dump文件
    获取dump文件的方式分为主动和被动

  • 主动方式:
    (1) 利用jmap,也是最常用的方式:jmap -dump:[live],format=b,file=
    (2) 利用jcmd,jcmd GC.heap_dump
    (3) 使用VisualVM,可以界面操作进行dump内存
    (4) 通过JMX的方式
  • 被动方式
    被动方式就是我们通常的OOM事件了,通过设置参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=
    通过Jprofiler打开,分析:上栏Biggest Objects,左栏Thread Dump
  1. 谈谈JVM中,你对类加载器的认识
    作用:加载class文件
    双亲委派机制:
    APP–>EXC—B0OT(最终执行)
    (1) 类加载器收到类加载的请求
    (2) 将这个请求向上委托给父类加载器去完成,一 直向上委托,知道启动类加载器
    (3) 启动加载器检查是否能够加载当前这个类,能加载就结束, 使用当前的加载器,否则, 抛出异常,通知子加载器进行加载
    (4) 重复步骤3
    双亲委派机制的作用:
    (1) 防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
    (2) 保证核心.class不能被篡改。通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

    类加载的五个步骤:加载,验证、准备、解析,初始化

  2. 其他面试题

  3. 狂神JVM笔记



这篇关于JVM小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程