-
GC 是什么,为什么要有 GC
参考答案 GC 是垃圾收集的意思 ,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。 Java提供的GC功能,可自动监测对象是否超过作用域,从而达到自动回收内存的目的 。 Java 语言没有提供释放已分配内存的显示操作方法,Java 程序员不用担心内存管理, 因为垃圾收集器自动进行管理。 要请求垃圾收集 ,可调用下面任一方法: System.gc() …...- 3.1k
-
32位JVM 和 64位JVM 的最大堆内存分别是多少
参考答案 理论上,32位的JVM 堆内存可以到达 2^32, 即4GB。但实际上会比这个小很多。 不同操作系统之间不同。例如,Windows 系统大约 1.5GB,Solaris 大约3GB。 64 位 JVM 允许指定最大的堆内存。 理论上可以达到 2^64,这是一个非常大的数字,实际上可以指定堆内存大小到 100GB。甚至有的 JVM,如 Azul,堆内存到 1000G 都是可能的。 &nbs…...- 160
-
老年代的概念是什么、以及运行原理
参考答案 老年代的概念及原理: 老年代主要存放应用程序中生命周期长的内存对象。 老年代的对象比较稳定,所以MajorGC不会频繁执行。 在进行 MajorGC 前一般都先进行了一次 MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。 当无法找到足够大的连续空间分配给新创建的较大对象时,也会提前触发一次 MajorGC进行垃圾回收腾出空间。 MajorGC采用标记清除算法: 首…...- 156
-
JVM 的永久代中会发生垃圾回收么,原因是什么
参考答案 垃圾回收不会发生在永久代。 原因: 如果永久代满了、或者超过了临界值,就会触发完全垃圾回收(Full GC)。 仔细查看垃圾收集器的输出信息,我们就会发现永久代也是被回收的。这就是为什么正确的永久代大小,对避免Full GC是非常重要的原因。 参考Java8:从永久代到元数据区 (注:Java8中已经移除了永久代,新增加了一个叫做元数据区的native内存区) 以上,是JV…...- 126
-
JVM 中的常量池有几种
参考答案 JVM 中有3种常见的常量池: 字符串常量池:存放在堆中,包括 String 对象执行 intern() 方法后存的地方、双引号直接引用的字符串。 运行时常量池:存放在方法区,属于元空间,是类加载后的一些存储区域,大多数是类中 constant_pool 的内容。 类文件常量池:constant_pool,JVM 定义的概念。 以上,JDK 1.8 开始。 以上,是JVM面试题【JVM中…...- 113
-
safepoint 是什么
参考答案 为减少对象引用的扫描,使用 OopMap的数据结构在特定的位置,记录下栈里和寄存器里哪些位置是引用。 为避免给每条指令都生成 OopMap记录占用大量内存的问题,只在特定位置记录这些信息。 安全点的选定不能太少、以免让收集器等待时间过长,也不能太过频繁、以免过分增大运行时的内存负荷。安全点位置的选取,基本上是以“是否具有让程序长时间执行的特征”为标准进行选定的,如方法调用、循环跳转、异常…...- 110
-
描述一下 JVM 加载 class 文件的原理机制
参考答案 1. JVM 中类的装载,是由类加载器(ClassLoader)和它的子类来实现的。 Java 中的类加载器是一个重要的 Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。 2. 由于 Java 的跨平台性,经过编译的 Java 源程序并不是一个可执行程序,而是一个或多个类文件。 当 Java 程序需要使用某个类时,JVM 会确保这个类已经被加载、连接(验证、准备和解析…...- 105
-
JVM 虚拟机面试路线最全整理(附面试题精选及答案)
JVM 虚拟机面试路线最全整理,附 JVM 虚拟机高频必考面试题及答案。 搞定 JVM 虚拟机面试题,看这一篇就够了,不用四处找资料,节约大量时间。 1 JVM 虚拟机面试题及答案 基础 JVM 是什么 JVM 中的常量池有几种 如何查看JVM 参数默认值 常用的JVM 配置参数有哪些 JIT 是什么 什么是方法内联 什么是逃逸分析 safepoint 是什么 class 文件的结构是怎样的…...- 102
-
GC日志如何开启和查看
参考答案 常见的 GC 日志开启参数包括: -Xloggc:filename,指定日志文件路径。 -XX:+PrintGC,打印 GC 基本信息。 -XX:+PrintGCDetails,打印 GC 详细信息。 -XX:+PrintGCTimeStamps,打印 GC 时间戳。 -XX:+PrintGCDateStamps,打印 GC 日期与时间。 -XX:+PrintHeapAtGC,打印 GC…...- 98
-
你知道哪些 JVM 性能调优
参考答案 1. 设定堆内存大小 -Xmx:堆内存最大限制。 2. 设定新生代大小。 新生代不宜太小,否则会有大量对象涌入老年代。 -XX:NewSize:新生代大小。 -XX:NewRatio 新生代和老生代占比。 -XX:SurvivorRatio:伊甸园空间和幸存者空间的占比。 3. 设定垃圾回收器 年轻代用 -XX:+UseParNewGC。 年老代用-XX:+UseConcMarkSwe…...- 95
-
生产环境 CPU 占用过高,该如何解决
参考答案 解决方法: top + H 指令找出占用 CPU 最高的进程的 pid。 top -H -p,在该进程中找到,哪些线程占用的 CPU 最高的线程,记录下 tid。 jstack -l > threads.txt,导出进程的线程栈信息到文本,导出出现异常的话,加上 -F 参数。 将 tid 转换为十六进制,在 threads.txt 中搜索,查到对应的线程代码执行栈,在代码中查找占 …...- 94
-
常用的调优工具有哪些
参考答案 1. jdk自带监控工具 jconsole:Java Monitoring and Management Console是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存, 线程和类等的监控 jvisualvm:可以分析内存快照、线程快照;监控内存变化、GC变化等。 2. 第三方 MAT(Memory Analyzer Tool):一个基于Eclipse…...- 89
-
class 文件的结构是怎样的
参考答案 一、class文件 Class 文件包含了 Java 虚拟机的指令集、符号表、辅助信息的字节码(Byte Code),是实现跨操作系统和语言无关性的基石之一。 一个 Class 文件定义了一个类或接口的信息,是以 8 个字节为单位,没有分隔符,按顺序紧凑排在一起的二进制流。 二、class文件用 "无符号数" 和 "表" 组成的伪结构来存储数据 无…...- 87
-
Java中 WeakReference 与 SoftReference 的区别
参考答案 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率。 但是, WeakReference一旦失去最后一个强引用,就会被GC回收。 软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。 以上,是JVM面试题【Java中WeakReference与SoftReference的区别】的参考答案。 输出,是最好的学习方法。 欢迎…...- 84
-
列举一些打破双亲委派机制的例子,为什么要打破
参考答案 打破双亲委派机制的例子、以及原因: JNDI 通过引入线程上下文类加载器,可以在 Thread.setContextClassLoader 方法设置,默认是应用程序类加载器,来加载 SPI 的代码。有了线程上下文类加载器,就可以完成父类加载器请求子类加载器完成类加载的行为。打破的原因,是为了 JNDI 服务的类加载器是启动器类加载,为了完成高级类加载器请求子类加载器(即上文中的线程上下文…...- 78
-
如何判断对象可以被回收
参考答案 判断对象是否存活,一般如下两种方式: 引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。这个方法简单,但无法解决对象相互循环引用的问题。 可达性分析:英文全称Reachability Analysis,从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不…...- 76
-
Java的垃圾回收机制是什么,以及特点
参考答案 垃圾回收机制的概念: 垃圾回收(Garbage Collection),简称GC。 采用垃圾回收机制,可释放垃圾占用的空间,防止内存泄露,有效的使用可以使用的内存,对内存堆中已经死亡的、或者长时间没有使用的对象进行清除和回收,以提高编程效率,保护程序的完整性。 垃圾回收机制的特点: JVM 有多种垃圾回收 实现算法,表现各异; 回收 JVM 堆内存里的对象空间,不负责回收栈内存数据; 无…...- 76
-
说说你对类加载器的了解
参考答案 虚拟机设计团队把加载动作放到 JVM 外部实现,以便让应用程序决定如何获取所需的类。 JVM 提供了 3 种类加载器: 1. 启动类加载器(Bootstrap ClassLoader) 负责加载 JAVA_HOME\lib 目录中的, 或通过-Xbootclasspath 参数指定路径中的, 且被虚拟机认可(按文件名识别, 如 rt.jar) 的类。 2. 扩展类加载器(Extens…...- 73
-
如何查看JVM参数默认值
参考答案 jps -v 可以查看 JVM进程显示指定的参数。 使用 -XX:+PrintFlagsFinal 可以看到 JVM 所有参数的值。 jinfo 可以实时查看和调整虚拟机各项参数。 以上,是JVM面试题【如何查看JVM参数默认值】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---...- 70
-
JVM 监控与分析工具都用过哪些
参考答案 JVM 监控工具 jps:显示系统所有虚拟机进程信息的命令行工具。 jstat:监视分析虚拟机运行状态的命令行工具。 jinfo:查看和调整虚拟机参数的命令行工具。 jmap:生成虚拟机堆内存转储快照的命令行工具。 jhat:显示和分析虚拟机的转储快照文件的命令行工具。 jstack:生成虚拟机的线程快照的命令行工具。 jcmd:虚拟机诊断工具,JDK 7 提供。 jhsdb:基于服务性…...- 69
-
如何排查OOM的问题
参考答案 排查OOM的问题,可按如下操作: 增加两个参数: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof,当 OOM 发生时,自动 dump 堆内存信息到指定目录。 同时, jstat 查看监控 JVM 的内存和 GC 情况,先观察问题大概出在什么区域。 使用 MAT 工具载入到 dump文件,分析大对象的…...- 65