吊打面试官!JVM虚拟机灵魂77问,你能答对多少?
JVM虚拟机77道题
1、java中会存在内存泄漏吗,请简单描述。
2、64位JVM中,int的长度是多数?
3、Serial与Parallel GC之间的不同之处?
4、32位和64位的JYM; int 类型变里的长度是多数?
5、Java 中WealReference 与SoftReference 的区别?
6、JYM选项-XX : +UseCompressedOops有什么作用?为什么要使用
7、怎样通过Java程序来判断JVM是32位还是64位?
8、32位JyM和64位JVM的最大堆内存分别是多数?
9、JRE、JDK、JMM及JIT之间有什么不同?
10、解释Java堆空间及GC?
11、JyM内存区域
12、程序计数器(线程私有)
13、虚拟机栈(线程私有)
14、本地方法区(线程私有)
15、你能保证GC执行吗?
16、怎么获取Java程序使用的内存?堆使用的百分比?
17、Java中堆和栈有什么区别?
18、描述一下JMM加载class文件的原理机制
19、GC是什么?为什么要有GC?
20、堆(Heap-线程共享) -运行时数据区
21、方法区/永久代(线程共享)
22、JMM运行时内存
23、新生代
24、老年代
25、永久代
26、JAVA8 与元数据
27、引用计数法
28、可达性分析
29、标记清除算法( Mark-Sweep)
30、复制算法(copying)
31、标记整理算法(Mark-Compact)
32、分代收集算法
33、新生代与复制算法
34、老年代与标记复制算法
35、JAVA强引用
36、JAVA软引用
37、JAVA弱引用
38、JAVA虚引用
39、分代收集算法
40、在新生代复制算法
41、在老年代标记整理算法
42、分区收集算法
43、GC垃圾收集器
44、Serial 垃圾收集器(单线程、复制算法)
45、ParNew 垃圾收集器(Serial+多线程)
46、Parallel Scavenge 收集器(多线程复制算法、高效)
47、Serial Old 收集器(单线程标记整理算法 )
48、Parallel Old 收集器(多线程标记整理算法)
49、CMS 收集器(多线程标记清除算法)
50、G1收集器
51、JYM类加载机制
52、类加载器
53、双亲委派
54、0SGI (动态模型系统)
55、动态改变构造
56、模块化编程与热插拔
57、JM内存模型
58、栈
59、本地方法栈
60、程序计数器
61、堆
62、方法区
63、分代回收
64、堆和栈的区别
65、什么时候会触发FullGC
66、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
67、对象分配规则
68、描述一下JM加载class文件的原理机制?
69、Java对象创建过程
70、简述Java的对象结构
71、如何判断对象可以被回收
72、JM的永久代中会发生垃圾回收么
73、垃圾收集算法
74、调优命令有哪些?
75、调优工具
76、Minor GC与Full GC分别在什么时候发生?
77、你知道哪些JVM性能调优
JVM面试题
1、java中会存在内存泄漏吗,请简单描述。
会。自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java.
2、64位JVM中,int的长度是多数?
Java中,int类型变量的长度是一一个固定值,与平台无关,都是32位。意思就是说,在32位和64位的Java虚拟机中,int类型的长度是相同的。
3、Serial 与Parallel GC之间的不同之处?
Serial与Parallel在GC执行的时候都会引起stop-the-world.它们之间主要不同serial收集器是默认的复制收集器,执行GC的时候只有一个线程,而parallel收集器使用多个GC线程来执行。
4、32位和64位的JVM , int类型变量的长度是多数?
32位和64位的JVM中,int类型变量的长度是相同的,都是32位或者4个字节。
5、Java中WeakReference与SoftReference的区别?
虽然WeakReference与SoftReference都有利于提高GC和内存的效率,但是WeakReference ,一旦失去最后一个强引用,就会被GC回收,而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。
6、JVM选项-XX:+UseCompressed0ops有什么作用?为什么要使用
当你将你的应用从32位的JVM迁移到64位的JVM时,由于对象的指针从32位增加到了64位,因此堆内存会突然增加,差不多要翻倍。
这也会对CPU缓存(容量比内存小很多)的数据产性不利的影响。因为,迁移到64位的JVM主要动机在于可以指定最大堆大小,通过压缩OOP可以节省-定的内存。通过-XX:+UseCompressedOops 选项, JVM会使用32位的OOP ,而不是64位的OOP。
7、怎样通过Java程序来判断JVM是32位还是64位?
你可以检查某些系统属性如sun.arch.data.model或os.arch来获取该信息。
8、32位JVM和64位JVM的最大堆内存分别是多数?
理论上说上32位的JM堆内存可以到达2^32 ,即4GB ,但实际上会比这个小很多。不同操作系统之间不同,如Windows系统大约1.5GB , Solaris大约3GB。64 位JVM允许指定最大的堆内存,理论上可以达到2^64 ,这是一个非常大的数字,实际上你可以指定堆内存大小到100GB。甚至有的JVM ,如Azul ,堆内存到1000G都是可能的。
9、JRE、JDK、JVM及JIT之间有什么不同?
JRE代表Java运行时(Java run-time) , 是运行Java引用所必须的。JDK代表Java开发工具( Java development kit) , 是Java程序的开发工具,如Java编译器,它也包含JRE。JM代表Java虚拟机( Java virtual machine ) ,它的责任是运行Java应用。JT 代表即时编译( Just In Time compilation) , 当代码执行的次数超过- -定的阈值时 ,会将Java字节码转换为本地代码,如,主要的热点代码会被准换为本地代码,这样有利大幅度提高Java应用的性能。
以上的面试题都已整理成册,可以关注我的公众号《老男孩的架构路》领取一线大厂Java面试题总结+各知识点学习思维导图+一份400页pdf文档的Java独家面试手册!
这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。