Java初级工程师面试题精选1_Java初级工程师面试题1

一 考察方向:JVM的内存分配模型和垃圾回收机制

Q1:什么是垃圾,确定垃圾有哪些方法?

垃圾是内存中无法被程序使用的对象,确定垃圾的方法有:引用计数法,可达性分析。

Q2:引用计数法的优缺点是什么?

优:将垃圾回收分摊到整个程序的运行中,并不需要Stop-The-World。缺:无法解决循环引用的问题,容易造成内存泄漏,因此事实上JVM并无使用该方法,而是使用可达性分析。

Q3:可达性分析使用的GC Root有哪些(顺便考察面试人员对JVM内存分配模型的了解程度)?

虚拟机栈/本地方法栈中引用的对象,方法区中类静态属性/常量引用对象。

Q4:以下程序中,对象MethodAreaStaicProperties("parameter")是否会被回收?

public class MethodAreaStaicProperties {

public static MethodAreaStaicProperties m;

public MethodAreaStaicProperties(String name){}

}

public static void testGC(){

MethodAreaStaicProperties s = new MethodAreaStaicProperties("properties");

s.m = new MethodAreaStaicProperties("parameter");

s = null;

}

不会,该对象和m有引用关系,而m是方法区中的静态属性,属于GC Root中的一种。

Q5:能否画出内存模型?

如下图(主要能说出虚拟机栈和堆关系和区别,栈:线程隔离,存放引用;堆:线程共享,存放对象)

7b864e17e61f1dd736b406069e35ce9c.png

Q6:有哪些垃圾回收的算法,以及各个算法的优缺点?

标记-清楚:简单,但会造成内存碎片

复制:不会产生内存碎片,但有一半的空间无法被分配

标记-整理:不会产生内存碎片,但内存变动频繁,效率较差

Q7:能否画出JVM的堆结构?

7137796a561df91ba699499dd4d8224e.png

Q8:能否简述分代收集算法的主要思想?

对于新生代中的对象,大部分生命周期较短,每次回收都有大量的对象死去,因此采用的是复制算法;而对于老年代的对象生命周期较长,采用标记-整理算法。当Eden区中没有足够的内存分配的时候就需要进行Minor GC,一次Minor GC会将Eden和From区中存活的对象复制到To区中,From和To区可以相互转化,本次的From区对下次来说就是To区。每经过一个Minor GC,存活下来的对象就”长了一岁“,只有16岁的对象才会被移到老年区。当老年区也没有足够内存可分配的时候就会进行Major GC了。每次GC都是Stop-The-World,Minor GC的效率较高而Major GC效率较低,如果Major GC次数过多将会严重影响程序的运行效率。

文章来源: www.oschina.net,作者:莫在全,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/u/4042451/blog/3162896

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值