
JVM
一共57篇文章
专题:第15期
-
Java中 WeakReference 与 SoftReference 的区别
参考答案 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率。 但是, WeakReference一旦失去最后一个强引用,就会被GC回收。 软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。 以上,是JVM面试题【Java中WeakReference与SoftReference的区别】的参考答案。 输出,是最好的学习方法。 欢迎…... 宝妹儿- 94
- 0
-
32位JVM 和 64位JVM 的最大堆内存分别是多少
参考答案 理论上,32位的JVM 堆内存可以到达 2^32, 即4GB。但实际上会比这个小很多。 不同操作系统之间不同。例如,Windows 系统大约 1.5GB,Solaris 大约3GB。 64 位 JVM 允许指定最大的堆内存。 理论上可以达到 2^64,这是一个非常大的数字,实际上可以指定堆内存大小到 100GB。甚至有的 JVM,如 Azul,堆内存到 1000G 都是可能的。 &nbs…... 宝妹儿- 168
- 0
-
你知道哪些 JVM 性能调优
参考答案 1. 设定堆内存大小 -Xmx:堆内存最大限制。 2. 设定新生代大小。 新生代不宜太小,否则会有大量对象涌入老年代。 -XX:NewSize:新生代大小。 -XX:NewRatio 新生代和老生代占比。 -XX:SurvivorRatio:伊甸园空间和幸存者空间的占比。 3. 设定垃圾回收器 年轻代用 -XX:+UseParNewGC。 年老代用-XX:+UseConcMarkSwe…... 宝妹儿- 107
- 0
-
常用的调优工具有哪些
参考答案 1. jdk自带监控工具 jconsole:Java Monitoring and Management Console是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存, 线程和类等的监控 jvisualvm:可以分析内存快照、线程快照;监控内存变化、GC变化等。 2. 第三方 MAT(Memory Analyzer Tool):一个基于Eclipse…... 宝妹儿- 100
- 0
-
垃圾收集算法有哪些,通常采用哪种算法
参考答案 GC最基础的算法有: 标记 -清除算法、复制算法、标记-压缩算法、分代收集算法。 我们常用的垃圾回收器一般都采用分代收集算法。 1. 标记 -清除算法 “标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。 2. 复制算法 “复制”(Copying)的收集算法,它将可用内存…... 宝妹儿- 29
- 0
-
JVM 的永久代中会发生垃圾回收么,原因是什么
参考答案 垃圾回收不会发生在永久代。 原因: 如果永久代满了、或者超过了临界值,就会触发完全垃圾回收(Full GC)。 仔细查看垃圾收集器的输出信息,我们就会发现永久代也是被回收的。这就是为什么正确的永久代大小,对避免Full GC是非常重要的原因。 参考Java8:从永久代到元数据区 (注:Java8中已经移除了永久代,新增加了一个叫做元数据区的native内存区) 以上,是JV…... 宝妹儿- 136
- 0
-
如何判断对象可以被回收
参考答案 判断对象是否存活,一般如下两种方式: 引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。这个方法简单,但无法解决对象相互循环引用的问题。 可达性分析:英文全称Reachability Analysis,从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不…... 宝妹儿- 84
- 0
-
简述 Java 的对象结构
参考答案 Java对象由三个部分组成:对象头、实例数据、对齐填充。 1. 对象头:由两部分组成 第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。 第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。如果是数组对象,则对象头中还有一部分用来记录数组长度。 2. 实例数据 实例数据用来存储对象真正的有效信息(包…... 宝妹儿- 22
- 0
-
说说你对类加载器的了解
参考答案 虚拟机设计团队把加载动作放到 JVM 外部实现,以便让应用程序决定如何获取所需的类。 JVM 提供了 3 种类加载器: 1. 启动类加载器(Bootstrap ClassLoader) 负责加载 JAVA_HOME\lib 目录中的, 或通过-Xbootclasspath 参数指定路径中的, 且被虚拟机认可(按文件名识别, 如 rt.jar) 的类。 2. 扩展类加载器(Extens…... 宝妹儿- 85
- 0
-
老年代的概念是什么、以及运行原理
参考答案 老年代的概念及原理: 老年代主要存放应用程序中生命周期长的内存对象。 老年代的对象比较稳定,所以MajorGC不会频繁执行。 在进行 MajorGC 前一般都先进行了一次 MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。 当无法找到足够大的连续空间分配给新创建的较大对象时,也会提前触发一次 MajorGC进行垃圾回收腾出空间。 MajorGC采用标记清除算法: 首…... 宝妹儿- 180
- 0