Java
未读
【JVM篇】Java垃圾收集详解
序言垃圾收集(Garbage Collection,下文简称GC)。程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回
每日一问
未读
【每日一问】请说一说CPU过高的排查思路
每日一问
未读
【每日一问】说一说ZGC的GC触发机制?
每日一问
未读
【每日一问】什么情况下会发生Full GC?
什么情况下会发生Full GC?(1)System.gc()方法的调用此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数。强烈影响系建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,可
每日一问
未读
【每日一问】如何排查内存泄漏?
如果观察一个系统,每次进行 FullGC 发现堆空间回收的比例比较小,尤其是老年代,同时对象越来越多,这个时候可 以判断是有可能发生内存泄漏.如何排查:使用jps查看虚拟机进程;使用jstat -gcutil [pid] [interval]命令查看gc回收情况;使用轻量级在线分析工具 jmap-h
每日一问
未读
【每日一问】说说JAVA形成死锁的条件以及如何排查死锁?
java 死锁产生的四个必要条件互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。循环等待,即存在一个等待队列:P1占有P2的资源,P2
Java
未读
【JVM篇】Java开疆拓土的垃圾收集器ZGC
为了满足不同的业务需求,Java 的 GC 算法也在不停迭代,对于特定的应用,选择其最适合的 GC 算法,才能更高效的帮助业务实现其业务目标。对于这些延迟敏感的应用来说,GC 停顿已经成为阻碍 Java 广泛应用的一大顽疾,需要更适合的 GC 算法以满足这些业务的
每日一问
未读
【每日一问】什么场景适合使用G1垃圾收集器?
G1垃圾收集器主要适用于大内存及对停顿时间有严格要求的场景。具体包括:堆内存建议在8GB以上,且存活对象占比超过50%;应用中对象分配与晋升的速率波动剧烈;当前垃圾回收耗时过长(超过1秒)。此外,对于需要将停顿时间控制在500ms以内的系统,G1也是理想的选择。这些特征下使用G1能获得更好的性能表现。
每日一问
未读
【每日一问】G1相对于CMS以及之前的一些垃圾收集器来说,为什么它对大内存的处理能力更强
G1相对于CMS以及之前的一些垃圾收集器来说,为什么它对大内存的处理能力更强?大内存的堆一次回收耗费时间可能很长,导致STW时间也会很长,G1提供可预测的停顿功能,这是G1相对于CMS的另一个大优势,降低停顿时间是G1 和 CMS 共同的关注点,但G1 除了追求低停顿外,还能建立可预测的停顿时间模型
每日一问
未读
【每日一问】请问浮动垃圾是如何产生的
浮动垃圾主要在并发标记过程中产生,由以下两种情况导致:一是方法运行结束后,GC Root被销毁,但其引用的对象之前已被扫描标记为非垃圾对象,导致本轮GC无法回收;二是基于“原始快照”机制,灰色对象删除白色对象引用时会被记录,并在后续扫描中将白色对象标记为黑色。这两种情况均使得本该回收的内存被遗漏,留待下一轮GC处理。
每日一问
未读
【每日一问】JVM有哪些垃圾回收算法?
JVM垃圾回收算法包括四种:标记-清除算法通过标记无用对象后清除回收,但效率不高且易产生内存碎片;标记-复制算法将内存分为两区,复制存活对象后清理,内存使用率仅半;标记-整理算法标记后移动存活对象并清理边界外内存,避免碎片;分代算法根据对象存活周期分新生代和老年代,新生代采用复制算法,老年代采用标记整理算法,优化回收效率。这些算法各有优缺点,分代算法是常用组合。
每日一问
未读
【每日一问】说说java虚拟机运行时数据区
Java虚拟机规范规定的运行时数据区分为5个部分。程序计数器是当前线程字节码行号指示器,支撑分支、循环等基础功能;Java虚拟机栈存储局部变量表、操作数栈、动态链接及方法出口等信息;本地方法栈类似虚拟机栈,服务于Native方法;Java堆是最大内存区域,所有线程共享,用于分配对象实例;方法区存储类信息、常量、静态变量及即时编译后的代码等数据。
Java
未读
【JVM篇】从源码角度分析JVM类加载机制
本文系统阐述了JVM的跨平台实现原理、Java编译过程及类加载机制。JVM通过将Java源码编译为平台无关的字节码(.class文件),再由各平台JVM解释或编译为本地机器码执行,实现“一次编译,到处运行”。javac编译过程包括词法分析、语法分析、语义分析、解语法糖等八个阶段,生成符合JVM规范的字节码。类加载子系统负责加载、验证、准备、解析和初始化类,采用双亲委派机制(Bootstrap/Extension/Application类加载器)确保类唯一性和安全性,避免核心库被篡改。特殊场景如Tomcat需打破双亲委派,通过自定义类加载器实现Web应用隔离和热部署。
每日一问
未读
【每日一问】jvm优化原则是什么
JVM优化的核心原则是减少FullGC以最小化Stop-The-World(STW)时间,因为FullGC的STW远长于YoungGC。这通过让对象尽可能在新生代分配和回收实现,避免频繁进入老年代。对象进入老年代有四个条件:1)存活对象达到年龄阈值(默认15,可调);2)大对象直接进入(超过参数设置);3)动态对象年龄判定(Survivor区年龄总和超半时,年龄较大对象进入);4)Young GC后Survivor空间不足。优化建议:避免创建大对象,尤其是朝生夕死的大对象,并确保Survivor区足够大,使YGC后存活对象不超过其一半,从而有效减少FullGC次数和时间。
每日一问
未读
【每日一问】讲一下 JVM 的主要组成部分及其作用?
JVM包含两个子系统和两个组件:两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。

