2020最新JVM相关面试题及答案

类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序

先静态、先父后子。

先静态:父静态 > 子静态

优先级:父类 > 子类 静态代码块 > 非静态代码块 > 构造函数
一个类的实例化过程:

  1. 父类中的static代码块,当前类的static
  2. 顺序执行父类的普通代码块
  3. 父类的构造函数
  4. 子类普通代码块
  5. 子类(当前类)的构造函数,按顺序执行。
  6. 子类方法的执行

JVM内存分配

JVM内存分哪几个区,每个区的作用是什么?
01

  1. 堆。 堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上,Java堆可使用-Xms -Xmx进行内存控制,值得一提的是从JDK1.7版本之后,运行时常量池从方法区移到了堆上。

    1. 方法区。它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区在JDK1.7版本及以前被称为永久代,从JDK1.8永久代被移除。
      虚拟机栈。虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
  2. 本地方法栈。与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

  3. 程序计数器。指示Java虚拟机下一条需要执行的字节码指令。
    以上五个区域是Java虚拟机内存划分情况,其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。

所以Java在通过new创建一个类对象实例的时候,一方面会在虚拟机栈中创建一个该对象的引用,另一方面会在堆上创建类对象的实例,然后将对象引用指向该对象的实例。对象引用存放在每一个方法对应的栈帧中。


Java中的异常有哪几类?分别怎么使用?

  • 检出异常,非检出异常。检出异常需要try…catch才能编译通过。非检出异常不用try…catch也能编译通过。
  • RuntimeException是非检出异常,不需要try…catch也能编译通过。
  • IoException,SQLException等等其他所有异常都是检出异常,必须要try…catach才能编译通过。

Java 8的内存分代改进

从永久代到元空间,在小范围自动扩展永生代避免溢出


jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等

答:对象优先在新生代区中分配,若没有足够空间,Minor GC;
大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。


JVM垃圾回收机制,何时触发MinorGC等操作

分代垃圾回收机制: 不同的对象生命周期不同。

把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。

JVM中共划分为三个代:年轻代、年老代和持久代
年轻代:存放所有新生成的对象;

  • 年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;

  • 持久代:用于存放静态文件,如Java类、方法等。

  • 新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为”Full Gc 或者Major
    GC”.其中用System.gc()强制执行的是Full Gc.

判断对象是否需要回收的方法有两种:

  1. 引用计数
    当某对象的引用数为0时,便可以进行垃圾收集。

  2. 对象引用遍历
    果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

触发GC(Garbage Collector)的条件:

  1. GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。

  2. Java堆内存不足时,GC会被调用。

  3. jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等

  • 对象优先在新生代区中分配,若没有足够空间,Minor GC;
    大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。

jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等

对象优先在新生代区中分配,若没有足够空间,Minor GC;
大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。


JVM常用参数

JVM主要参数:堆设置、回收器选择(串行、并行、并发收集器)


内存溢出是怎么回事?

对象有被指向的引用,但是再也用不到它就是内存溢出了。

GC机制:复制回收,标记清除,引用计数(如果有循环引用后,会影响垃圾回收,所以JVM虚拟机没有采用此方法进行垃圾回收)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值