
jvm虚拟机
文章平均质量分 92
jvm虚拟机知识
惊骇世俗王某人
小王我啊,很俗,很傻,很天真,望集百家所长,慰己心中不安。如果上天能给我一个机会,我绝不会选这么卷的专业。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
16. JVM调优工具
本文介绍了JVM性能监控与调优的常用工具,分为命令行工具和可视化工具两类。命令行工具包括:jps查看Java进程信息,jstack分析线程堆栈,jmap生成堆转储快照,jhat分析堆转储文件,jstat监控JVM统计信息。可视化工具主要有JConsole和VisualVM,前者提供基础监控功能,后者支持插件扩展和深度分析。文章详细说明了各工具的作用、常用选项和使用示例,并对比了不同工具的适用场景,为JVM性能问题诊断提供了实用指导。原创 2025-07-13 15:24:41 · 1033 阅读 · 0 评论 -
15. JVM调优的参数设置
JVM调优核心参数配置指南 堆内存设置:-Xms与-Xmx建议设为相同值(不超过物理内存80%),避免动态扩容开销 线程栈调整:-Xss可降低默认1MB设置(如256KB)以增加线程数,需注意递归深度 年轻代比例:-XX:SurvivorRatio调整Eden与Survivor区比例(默认8:1:1),对象存活率高时可降低比例 晋升阈值:-XX:MaxTenuringThreshold控制对象晋升老年代的GC次数(默认15),短期对象多时可调低 回收器选择: JDK8推荐G1或CMS(已废弃) JDK11+原创 2025-07-13 14:23:29 · 458 阅读 · 0 评论 -
14. 垃圾回收的引用区别
Java垃圾回收机制通过四种引用类型管理对象生命周期: 强引用(默认)直接关联对象,除非显式断开否则不会被回收; 软引用适合缓存场景,内存不足时才回收; 弱引用在GC时必定回收,常用于防内存泄漏; 虚引用仅用于回收通知,必须配合引用队列使用。主要区别在于回收时机和用途:强引用保持对象存活,软/弱引用分别应对内存不足和常规回收,虚引用专用于资源清理。通过合理使用不同引用类型,可以有效控制内存使用并避免内存泄漏。原创 2025-07-13 13:40:06 · 718 阅读 · 0 评论 -
13. G1垃圾回收器
G1 通过这三个阶段的配合,实现了低延迟与高吞吐的平衡,尤其适合大内存、多核CPU的场景。阶段并发性目标触发条件年轻代回收STW快速回收Eden/SurvivorEden区满并发标记周期部分并发标记全堆存活对象,确定优先级老年代占用达阈值(默认45%)混合回收STW回收年轻代+高垃圾老年代Region并发标记周期完成后。原创 2025-07-12 23:59:39 · 921 阅读 · 0 评论 -
10. 垃圾回收的算法
垃圾回收分为2个阶段,分别是标记和清除,效率高,有磁盘碎片,内存不连续。标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,无碎片,对象需要移动,效率低。将原有的内存空间一分为二,每次只用其中的一块,正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收;无碎片,内存使用率低。上一篇 下一篇。原创 2025-07-12 21:13:57 · 855 阅读 · 0 评论 -
12. JVM的垃圾回收器
JVM主要包含四种垃圾回收器:1)串行垃圾回收器(SerialGC),单线程执行,适用于单核CPU环境;2)并行垃圾回收器(ParallelGC),多线程并行执行,提高吞吐量,JDK8默认使用;3)CMS垃圾回收器(ConcurrentMark-SweepGC),并发执行减少停顿时间,但会产生内存碎片,Java14后被移除;4)G1垃圾回收器(Garbage-FirstGC),Java9后默认,采用分Region收集,平衡吞吐与延迟,适合大堆内存。不同回收器适用于不同场景,如串行适合小型应用,并行适合高吞吐原创 2025-07-12 23:02:39 · 845 阅读 · 0 评论 -
11. JVM中的分代回收
摘要:JVM分代回收将堆分为年轻代(Eden和Survivor区)和老年代。新对象先在Eden分配,空间不足时通过复制算法将存活对象移至Survivor区(From/To交替),经历15次复制后晋升老年代。老年代使用标记-清除-整理算法。回收类型包括MinorGC(年轻代)、MixedGC(G1特有)和FullGC(全堆)。通过记忆集处理跨代引用,优化回收效率。STW机制会暂停应用线程进行垃圾回收。原创 2025-07-12 21:59:05 · 667 阅读 · 0 评论 -
9. JVM垃圾回收
文章摘要:垃圾回收机制通过引用计数法和可达性分析算法定位可回收对象。引用计数法通过计数器增减判断对象引用情况,实现简单但无法处理循环引用;可达性分析算法从GC Roots出发遍历引用链,能解决循环引用但需暂停用户线程。Java虚拟机采用可达性分析算法,因其更适合面向对象特性。对象在无引用时成为垃圾,可能被回收器处理。原创 2025-07-12 20:39:41 · 428 阅读 · 0 评论 -
8. JVM类装载的执行过程
《JVM类装载机制解析》 摘要: JVM类装载是将.class文件加载到内存并转换为可执行类型的关键过程,包含7个生命周期阶段:1)加载:获取字节流并生成Class对象;2)验证:确保字节流安全合规;3)准备:分配静态变量内存;4)解析:替换符号引用;5)初始化:执行<clinit>()方法进行静态初始化;6)使用:运行程序代码;7)卸载:垃圾回收释放资源。其中初始化阶段通过编译器自动生成的<clinit>()方法实现,该过程具有线程安全性,确保父类优先初始化。类装载机制支撑了Jav原创 2025-07-12 17:36:11 · 776 阅读 · 0 评论 -
7. JVM类加载器与双亲委派模型
Java类加载器是JVM的核心组件,负责将字节码文件加载为Class对象。主要包含启动类加载器(加载核心库)、扩展类加载器(加载ext目录)、应用类加载器(加载classpath)和自定义类加载器。双亲委派模型是其工作机制:加载请求先委托父加载器处理,父类无法完成时才由子类处理。该机制确保核心API安全、避免重复加载,保证类唯一性和类型安全。Java9后目录结构简化,不再单独保留jre目录。原创 2025-07-12 16:45:20 · 817 阅读 · 0 评论 -
6. JVM直接内存
《Java直接内存解析》 直接内存是Java绕过JVM堆直接访问操作系统本地内存的机制,不受-Xmx参数限制。相较于堆内存,直接内存通过NIO操作实现高效IO(减少数据复制),但需手动管理回收。其本质是JVM向OS申请的本机内存(如Linux的mmap),适用于高频IO、大数据处理等场景。与JVM堆内存的关键区别在于:直接内存由用户代码管理,存于本机内存,不受GC管控;而堆内存由JVM管理,受GC自动回收。典型应用包括NIO网络编程和本地代码交互场景。原创 2025-07-12 16:11:08 · 318 阅读 · 0 评论 -
5. JVM 的方法区
摘要:方法区是JVM内存结构中存储类信息、常量、静态变量等数据的共享区域,JDK8前用永久代实现,后改为元空间。常量池分为编译期的Class文件常量池和运行时的运行时常量池,存储符号引用和字面量,类加载时解析为直接引用存入方法区。方法区在虚拟机启动时创建,关闭时释放,内存不足会抛出OutOfMemoryError。(149字)原创 2025-07-12 15:36:43 · 557 阅读 · 0 评论 -
4. 虚拟机栈
虚拟机栈是 Java虚拟机(JVM) 运行时数据区的一部分,是线程私有的内存区域,每个线程在创建时都会创建一个虚拟机栈。原创 2025-07-12 14:28:57 · 295 阅读 · 0 评论 -
3. java 堆和 JVM 内存结构
Java堆是JVM管理的最大内存区域,用于存储对象实例和数组,具有共享性、动态分配和垃圾回收特性。现代JVM将堆划分为新生代(Eden区和Survivor区)、老年代和元空间。与栈相比,堆是线程共享的、动态分配的、可被垃圾回收且容量较大。合理配置堆内存对JVM性能调优至关重要,直接影响应用程序的稳定性和效率。原创 2025-07-12 13:53:10 · 324 阅读 · 0 评论 -
2. 什么是程序计数器
摘要:程序计数器是JVM中线程私有的内存空间,用于存储当前执行的JVM指令地址。它是线程安全的,每个线程独立拥有,在切换线程时能正确恢复执行位置。执行Java方法时记录指令地址,执行本地方法时为undefined。程序计数器不会出现内存溢出,生命周期与线程一致。通过示例可见,当线程被中断时,程序计数器会保存当前执行位置,确保后续继续执行。原创 2025-07-12 13:34:59 · 211 阅读 · 0 评论 -
1. JVM介绍和运行流程
JVM(Java虚拟机)是Java程序的核心运行环境,负责执行编译后的字节码文件,实现"一次编写,到处运行"的跨平台特性。它主要由三个子系统组成:类加载子系统(负责加载类文件)、运行时数据区(包含方法区、堆、栈等内存区域)和执行引擎(包括解释器、JIT编译器和垃圾回收器)。JVM提供自动内存管理、安全沙箱等特性,支持多种JVM语言(如Java、Scala等),通过将字节码转换为机器码来实现高效执行。原创 2025-07-12 13:08:32 · 290 阅读 · 0 评论