什么是safepoint,有啥用?
什么是safe point,有啥用? 典型回答 Safe Point(安全点)是JVM中的一个关键概念。官方的解释是(https://openjdk.org/groups/hotspot/docs/HotSpotGlossary.html): A point during program execution at which all GC roots are known and ...
什么是safe point,有啥用? 典型回答 Safe Point(安全点)是JVM中的一个关键概念。官方的解释是(https://openjdk.org/groups/hotspot/docs/HotSpotGlossary.html): A point during program execution at which all GC roots are known and ...
什么是Stop The World? Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起。这是Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互。 不管选择哪种GC算法,stop-the-world都是不能彻底避免的,只能尽量降低STW的时长。 为什么需要STW呢? ...
什么是STW?有什么影响? 典型回答 STW,是Stop-The-World的缩写,Stop-The-World是指系统在执行特定操作时,必须暂停(停止)所有的应用程序线程。 比如在Java中,当需要进行垃圾回收的时候,垃圾回收器需要停止应用程序的所有线程,以便可以安全地识别和回收不再使用的对象。这个过程我们就会称之为是Stop The World了。 STW事件会暂时停止应用程序的...
什么是Class常量池,和运行时常量池关系是什么? 典型回答 Class常量池可以理解为是Class文件中的资源仓库。 Class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。 Class是用来保存常量的一个媒介...
什么是AOT编译?和JIT有啥区别? 典型回答 我们都知道,Java中有两种编译方法: 1、javac把java代码编译成字节码,然后由Java虚拟机解释执行。 2、JIT把java代码直接编译成机器码,然后由Java虚拟机直接运行。 简单介绍一下JIT优化技术? 但是,JIT编译有一些比较明显的缺点也是不能忽视的: 增加启动时间:由于JIT编译器在程序运行时编译代码,它...
什么情况会导致JVM退出? 典型回答 程序正常运行完 当Java应用程序中的所有非守护线程(即用户线程)都完成执行且没有其他活动线程时,JVM会正常退出。这是最常见的退出方式。 什么是守护线程,和普通线程有什么区别? System.exit() 被调用 当代码中的任何位置调用 System.exit(int status) 方法时,JVM会立即开始终止过程。这个方法可以接受一个状态...
为什么初始标记和重新标记需要STW,而并发标记不需要? 典型回答 CMS(Concurrent Mark-Sweep)和G1(Garbage-First)是两种常见的收集器,它们都旨在减少应用程序停顿时间。他们的GC过程采用三色标记法,把整个GC过程分为了初始标记、并发标记、重新标记、以及垃圾清理。 其中初始标记和重新标记都是需要STW的,而并发标记则不需要。 什么是STW?有什么影...
为什么G1从JDK 9之后成为默认的垃圾回收器? 典型回答 G1,Garbage First,是CMS的改进版,解决了CMS内存碎片、更多的内存空间等问题。总之,G1是一个先进的垃圾收集器,它可以提高系统的吞吐量,降低停顿的频率,并且可以有效管理大型堆。在JDK 9之后,G1成为了默认的垃圾回收器,主要是因为他有以下优势: 并发回收:G1能充分利用CPU、多核环境下的硬件优势,使...
一个对象的结构是什么样的? Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的。而这个关于Java对象自身的存储模型称之为Java对象模型。 HotSpot JVM设计了一个OOP-Klass Model。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。 每一个Java类,在被JVM加载的时...
一个Java进程占用的内存都哪些部分? 典型回答 Java进程,在运行时会占用多块内存区域,其中我们比较熟的就是堆、栈、等区域,但是,其实详细列举的话还是有挺多的,主要包含以下部分区域: 堆 堆是存储对象实例的运行时内存区域。它是虚拟机运行时的内存总体的最大的一块,也一直占据着虚拟机内存总量的一大部分。Java堆由Java虚拟机管理,用于存放对象实例,是几乎所有的对象实例都要在上...