Ryan's Blog

什么是stw?有什么影响?

什么是STW?有什么影响? 典型回答 STW,是Stop-The-World的缩写,Stop-The-World是指系统在执行特定操作时,必须暂停(停止)所有的应用程序线程。 比如在Java中,当需要进行垃圾回收的时候,垃圾回收器需要停止应用程序的所有线程,以便可以安全地识别和回收不再使用的对象。这个过程我们就会称之为是Stop The World了。 STW事件会暂时停止应用程序的...

什么是class常量池,和运行时常量池关系是什么?

什么是Class常量池,和运行时常量池关系是什么? 典型回答 Class常量池可以理解为是Class文件中的资源仓库。 Class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。 Class是用来保存常量的一个媒介...

什么是aot编译?和jit有啥区别?

什么是AOT编译?和JIT有啥区别? 典型回答 我们都知道,Java中有两种编译方法: 1、javac把java代码编译成字节码,然后由Java虚拟机解释执行。 2、JIT把java代码直接编译成机器码,然后由Java虚拟机直接运行。 简单介绍一下JIT优化技术? 但是,JIT编译有一些比较明显的缺点也是不能忽视的: 增加启动时间:由于JIT编译器在程序运行时编译代码,它...

什么情况会导致jvm退出?

什么情况会导致JVM退出? 典型回答 程序正常运行完 当Java应用程序中的所有非守护线程(即用户线程)都完成执行且没有其他活动线程时,JVM会正常退出。这是最常见的退出方式。 什么是守护线程,和普通线程有什么区别? System.exit() 被调用 当代码中的任何位置调用 System.exit(int status) 方法时,JVM会立即开始终止过程。这个方法可以接受一个状态...

为什么初始标记和重新标记需要stw,而并发标记不需要?

为什么初始标记和重新标记需要STW,而并发标记不需要? 典型回答 CMS(Concurrent Mark-Sweep)和G1(Garbage-First)是两种常见的收集器,它们都旨在减少应用程序停顿时间。他们的GC过程采用三色标记法,把整个GC过程分为了初始标记、并发标记、重新标记、以及垃圾清理。 其中初始标记和重新标记都是需要STW的,而并发标记则不需要。 什么是STW?有什么影...

为什么g1从jdk9之后成为默认的垃圾回收器?

为什么G1从JDK 9之后成为默认的垃圾回收器? 典型回答 G1,Garbage First,是CMS的改进版,解决了CMS内存碎片、更多的内存空间等问题。总之,G1是一个先进的垃圾收集器,它可以提高系统的吞吐量,降低停顿的频率,并且可以有效管理大型堆。在JDK 9之后,G1成为了默认的垃圾回收器,主要是因为他有以下优势: 并发回收:G1能充分利用CPU、多核环境下的硬件优势,使...

一个java进程占用的内存都哪些部分?

一个Java进程占用的内存都哪些部分? 典型回答 Java进程,在运行时会占用多块内存区域,其中我们比较熟的就是堆、栈、等区域,但是,其实详细列举的话还是有挺多的,主要包含以下部分区域: 堆 堆是存储对象实例的运行时内存区域。它是虚拟机运行时的内存总体的最大的一块,也一直占据着虚拟机内存总量的一大部分。Java堆由Java虚拟机管理,用于存放对象实例,是几乎所有的对象实例都要在上...