
JVM
文章平均质量分 95
Reset‘
这个作者很懒,什么都没留下…
展开
-
JVM(十二)细谈JVM类加载的各个过程以及如何修改Java原生API
本文深入探讨了Java虚拟机(JVM)的类加载机制,包括类的加载、验证、准备、解析和初始化等过程。文章首先通过几个高级面试问题引入主题,然后详细解释了JVM类加载的五个阶段及其重要性。接着,介绍了Java的三个主要类加载器:启动类加载器、扩展类加载器和应用类加载器,并阐述了双亲委派机制的工作原理和其在保证Java类加载安全性中的作用。文章还讨论了打破双亲委派机制的几种情况,如Tomcat、JDBC的SPI机制和OSGi。最后,介绍了如何使用endorsed技术替换JDK中的类。原创 2024-08-07 12:48:52 · 1401 阅读 · 0 评论 -
JVM(十一)深入理解JVM类加载全过程以及各种类加载器
本文深入探讨了Java类加载器的工作原理和类加载过程,包括类的生命周期、加载时机、类加载机制,并提供了自定义类加载器的示例。文章首先解释了类加载过程的五个阶段:加载、验证、准备、解析和初始化,并讨论了类的主动使用和被动引用场景。接着,介绍了双亲委派模型,阐释了类加载器的层次结构和职责,包括启动类加载器、扩展类加载器和应用类加载器。文章还提供了实用技巧,如排查类加载问题、调整类加载路径和运行时动态加载类。原创 2024-08-07 12:48:01 · 1930 阅读 · 0 评论 -
JVM(十)深入理解JVM类加载模型以及双亲委派模型
本文详细介绍了Java的类加载机制,包括加载、链接和初始化三个阶段。强调了双亲委派模型的重要性,这是一种避免重复加载类并维持Java核心库安全的类加载策略。文章还探讨了Java类加载器的不同类型,包括启动类加载器、扩展类加载器和应用类加载器,并讨论了Java 9中引入的模块化系统对类加载器架构的影响。此外,提到了自定义类加载器的使用场景,如进程内隔离和动态字节码操作。最后,介绍了AppCDS技术,它通过共享归档来减少Java应用的启动时间和内存占用。原创 2024-08-07 12:47:26 · 1029 阅读 · 0 评论 -
JVM(九)深入解析Java字节码技术与执行模型
这篇文章深入探讨了Java字节码技术,包括字节码的简介、获取字节码清单的方法、解读字节码清单、查看class文件中的常量池信息、查看方法信息、线程栈与字节码执行模型、方法体中的字节码解读、对象初始化指令、栈内存操作指令、局部变量表、流程控制指令、算术运算指令与类型转换指令、方法调用指令和参数传递,以及JDK7新增的方法调用指令invokedynamic原创 2024-08-06 16:17:41 · 1281 阅读 · 0 评论 -
JVM(八)深入理解G1 GC(Garbage First)
探讨了G1垃圾回收器,一种在Java虚拟机中用于老年代垃圾回收的算法。G1的设计目标是减少停顿时间,适用于对延迟敏感的应用。它通过多个阶段实现垃圾回收,包括初始标记、并发标记、重新标记和并发清理。文章详细描述了这些阶段的工作原理和G1如何处理内存碎片问题。虽然G1能减少停顿时间,但它也有缺点,如内存碎片、需要预留空间处理浮动垃圾,以及更高的CPU资源消耗。随着新垃圾回收器如ZGC的出现,G1的使用正在逐渐减少,但对于运行在Java 8及以下版本的应用,G1的优化仍然重要。原创 2024-08-06 14:16:48 · 2001 阅读 · 0 评论 -
JVM(七)深入理解CMS垃圾收集器( Mostly Concurrent Mark and Sweep Garbage Collector)
本文主要深入讲解了CMS垃圾回收器,一种在Java虚拟机中用于老年代垃圾回收的算法。CMS的设计目标是减少停顿时间,适用于对延迟敏感的应用。它通过多个阶段实现垃圾回收,包括初始标记、并发标记、重新标记和并发清理。文章详细描述了这些阶段的工作原理和CMS如何处理内存碎片问题。虽然CMS能减少停顿时间,但它也有缺点,如内存碎片、需要预留空间处理浮动垃圾,以及更高的CPU资源消耗。随着新垃圾回收器如G1和ZGC的出现,CMS的使用正在逐渐减少,但对于运行在Java 8及以下版本的应用,CMS的优化仍然重要原创 2024-08-06 14:16:16 · 1114 阅读 · 0 评论 -
JVM(六)GC算法(标记、清除、复制、整理、分代、卡片标记、HotSpor垃圾收集器、StopTheWorld(STW))
本文深入解析了Java虚拟机的垃圾回收机制,涵盖了垃圾回收算法、分代垃圾回收策略及不同垃圾回收器的特点。文章首先介绍了标记、清除、复制和整理等基础算法,接着详细阐述了年轻代和老年代在垃圾回收过程中的角色及工作原理。文章还列举了Serial、ParNew、Parallel Scavenge等常见垃圾回收器,分析了它们的优缺点及适用场景。最后,讨论了弱代假设、分配担保等关键概念,强调了减少停顿时间、提高吞吐量在垃圾回收器设计中的重要性。原创 2024-08-06 14:15:46 · 825 阅读 · 0 评论 -
JVM(五)Parallel GC,CMS GC,G1 GC详解
本文详细介绍了JVM中的几种常见GC算法及其实现,包括串行GC、并行GC、CMS垃圾收集器和G1垃圾收集器。串行GC是单线程的,适合小规模应用,而并行GC通过多线程提高吞吐量,但可能导致长时间停顿。CMS GC旨在减少老年代回收时的停顿,通过并发标记和清除阶段减少STW时间,但可能产生内存碎片。G1 GC的目标是实现可预期的停顿时间,通过将堆划分为多个小块并优先回收垃圾最多的区域,G1在并发阶段估算存活对象并执行增量回收,减少停顿时间。G1还引入了Remembered Sets来优化独立回收。转载 2024-08-06 14:15:03 · 2232 阅读 · 0 评论 -
JVM(四)垃圾收集器GC的原理
本文深入探讨了Java虚拟机(JVM)中的垃圾收集(GC)机制,阐释了GC的基本概念、工作原理和多种算法。文章首先指出了手动内存管理的不足,随后介绍了引用计数法的局限性。接着,文章详细描述了JVM采用的标记-清除(Mark and Sweep)算法,包括标记阶段的STW(Stop The World)停顿和清除阶段的内存碎片问题。为了解决这些问题,提出了碎片整理和分代假设的概念,将JVM内存划分为年轻代和老年代,并根据不同代的特点采用不同的GC策略。原创 2024-08-05 20:33:59 · 851 阅读 · 0 评论 -
JVM(二)哪些区域可能发生OOM(OutOfMemoryError)
同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。毕竟理论上的视角和现实中的视角是有区别的,规范侧重的是通用的、无差别的部分,而对于应用开发者来说,只要是 Java 进程在运行时会占用,都会影响到我们的工程实践。今天是 JVM 内存部分的第一讲,算是我们先进行了热身准备,我介绍了主要的内存区域,以及在不同版本 Hotspot JVM 内部的变化,并且分析了各区域是否可能产生 OutOfMemoryError,以及 OOME 发生的典型情况。原创 2024-08-05 18:47:49 · 1056 阅读 · 0 评论 -
JVM(一)JVM和JMM内存模型
JVM 支持程序多线程执行,每个线程是一个Thread,如果不指定明确的同步措施,那么多个线程在访问同一个共享变量时,就看会发生一些奇怪的问题,比如 A 线程读取了一个变量 a=10,想要做一个只要大于9就减2的操作,同时 B 线程先在 A 线程操作前设置 a=8,其实这时候已经不满足 A 线程的操作条件了,但是 A 线程不知道,依然执行了 a-2,最终 a=6;实际上 a 的正确值应该是 8,这个没有同步的机制在多线程下导致了错误的最终结果。原创 2024-08-05 14:32:10 · 1972 阅读 · 0 评论