Java面试题解答:JVM内存管理、GC算法和JVM选项

需积分: 0 0 下载量 151 浏览量 更新于2024-06-11 收藏 34KB DOCX 举报
"JVM 面试题知识点" **Java 内存泄漏** Java 中确实存在内存泄漏的可能性,例如自行实现堆载的数据结构时可能会出现内存泄露。内存泄露是指程序中已经不再需要的对象却不能被垃圾回收器回收,导致内存的浪费。 **Java 数据类型长度** 在 Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。无论是在 32 位还是 64 位的 Java 虚拟机中,int 类型的长度都是相同的。 **垃圾回收器 Serial 与 Parallel** Serial 和 Parallel 都是 Java 垃圾回收器的两种模式。它们之间的主要区别是 Serial 收集器是默认的复制收集器,执行 GC 时只有一个线程,而 Parallel 收集器使用多个 GC 线程来执行。都将引起 stop-the-world。 **WeakReference 与 SoftReference** WeakReference 和 SoftReference 都是 Java 中的引用类型,都是为了提高 GC 和内存的效率。WeakReference 一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。 **JVM 选项 -XX:+UseCompressedOops** -XX:+UseCompressedOops 是 JVM 的一个选项,当你将应用从 32 位的 JVM 迁移到 64 位的 JVM 时,由于对象的指针从 32 位增加到了 64 位,因此堆内存会突然增加,差不多要翻倍。这也会对 CPU 缓存(容量比内存小很多)的数据产生不利的影响。通过使用压缩 OOP,可以节省一定的内存。 **判断 JVM 是 32 位还是 64 位** 可以检查某些系统属性如 sun.arch.data.model 或 os.arch 来获取该信息。 **32 位 JVM 和 64 位 JVM 的最大堆内存** 理论上说,32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多。不同操作系统之间不同,如 Windows 系统大约 1.5GB,Solaris 大约 3GB。64 位 JVM 允许指定最大的堆内存,理论上可以达到 2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到 100GB。甚至有的 JVM,如 Azul,堆内存到 1000G 都是可能的。