JVM面试关键点:内存泄漏、数据类型与GC策略

需积分: 0 0 下载量 132 浏览量 更新于2024-06-25 收藏 34KB DOCX 举报
"JVM 77道面试题和答案.docx 包含了关于Java虚拟机(JVM)的常见面试问题和解答,涵盖了内存管理、垃圾收集、数据类型、引用类型以及JVM选项等多个方面。" 1. **Java中的内存泄漏** Java中存在内存泄漏的可能性,尤其是在程序员自定义数据结构时。例如,如果一个对象被长期持有但不再使用,且没有被正确地解除引用,就会导致内存无法被回收,从而引发内存泄漏。 2. **Java数据类型长度** Java中的`int`类型长度是固定的,无论是在32位还是64位的JVM上,它都占32位或4个字节。这意味着其存储范围在-2,147,483,648到2,147,483,647之间。 3. **Serial与Parallel GC比较** Serial和Parallel GC都是Stop-the-World的收集器,意味着在GC过程中应用程序会被暂停。主要区别在于Serial收集器使用单线程进行垃圾回收,而Parallel收集器则利用多线程,以提高垃圾回收的效率。 4. **WeakReference与SoftReference** WeakReference的对象一旦失去所有强引用,就会立即被垃圾收集器回收。而SoftReference则更“软”,它的对象会在系统内存不足时才被回收,用于实现内存敏感的缓存策略。 5. **-XX:+UseCompressedOops选项** 这个选项用于64位JVM,目的是压缩对象指针,减少从32位到64位迁移时内存的开销。启用后,JVM使用32位而非64位的OOP,以节省内存并缓解CPU缓存的压力。 6. **判断JVM位数** 通过Java程序,可以检查系统属性`sun.arch.data.model`或`os.arch`来判断JVM是32位还是64位。 7. **32位与64位JVM的最大堆内存** 32位JVM的理论最大堆内存是4GB(2^32),但实际可用通常远小于这个值,受到操作系统的限制。64位JVM理论上允许更大的堆,可达2^64字节,但由于硬件限制,实际可设定的最大值会远小于理论值,但通常远超32位JVM。 8. **JRE与JVM** JRE(Java Runtime Environment)是运行Java程序所需的环境,包括JVM、类库以及其他必要的组件。JVM是JRE的核心部分,负责执行字节码。JDK(Java Development Kit)则包含了JRE和开发工具,用于编写和调试Java程序。 这些面试问题揭示了JVM的关键概念,对于理解Java内存管理、性能优化和平台差异至关重要。掌握这些知识点能帮助开发者更好地诊断和解决Java应用中的性能问题。