文章目录
1、java 中 WeakReference 与 SoftReference 的区别?
虽然 WeakReference 与 SoftReference 都有利于提高 GC 和内存 的效率,但是 WeakReference,一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。
2、WeakHashMap 是怎么工作的?
WeakHashMap 的工作与正常的 HashMap 类似,但是使用弱引用作为 key, 意思就是当 key 对象没有任何引用时,key/value 将会被回收。
3、JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用?
当你将你的应用从32位的 JVM 迁移到 64位的 JVM 时,由于对象的指针从32位增加到了64位,因此堆内存会突然增加,差不多要翻倍。这也会对 CPU缓存(容量比内存小很多)的数据产生不利的影响。因为,迁移到 64位的 JVM 主要动机在于可以指定最大堆大小,通过压缩OOP 可以节省一定的内存。通过-XX:+UseCompressedOops 选项,JVM 会使用 32位的 OOP,而不是 64位的 OOP。
4、怎样通过 java 程序来判断 JVM 是 32 位还是 64位?
你可以检查某些系统属性如 sun.arch.data.model 或 os.arch 来获取信息。
5、32位 JVM 和 64位 JVM的最大堆内存分别是多数?
理论上说上32位的 JVM 堆内存可以达到 2^32,即 4GB,但实际上会比这个小很多。不同操作系统之间不同,如 Windows 系统大约 1.5GB, Solaris 大约 3GB。 64位 JVM 允许指定最大的堆内存,理论上可以达到 2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到 100GB。甚至有的 JVM,如 Azul, 堆内存到 1000G都是可能的。