
JVM相关知识
文章平均质量分 95
JVM相关知识体系详解
小小兔在普陀山走神啊
三年以来,三十年以来,由此上溯到一千八百四十年人民英雄们永垂不朽!
展开
-
调试排错 - Java动态调试技术原理
断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言中的动态调试技术,首先概括Java动态调试所涉及的技术基础,接着介绍我们在Java动态调试领域的思考及实践,通过结合实际业务场景,设计并实现了一种具备动态性的断点调试工具Java-debug-tool,显著提高了故障排查效率。原创 2025-04-27 13:46:52 · 1006 阅读 · 0 评论 -
调试排错 - Java 问题排查之使用IDEA本地调试和远程调试
Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化;并且在实际的排错过程中,还会用到Remote Debug。IDEA 相比 Eclipse/STS效率更高,本文主要介绍基于IDEA的Debug和Remote Debug的技巧。原创 2025-04-27 13:46:24 · 825 阅读 · 0 评论 -
调试排错 - Java 问题排查之应用在线调试Arthas
在学习Arthas之前,推荐先看上一篇美团技术团队的Java 动态调试技术原理及实践,这样你会对它最底层技术有个了解。可以看下文中最后有个对比图:Greys(Arthas也是基于它做的二次开发)和Java-debug-tool。原创 2025-04-27 13:45:58 · 782 阅读 · 0 评论 -
调试排错 - Java 问题排查之JVM可视化工具
概述内存线程类VM概要MBean。原创 2025-04-25 10:12:20 · 1440 阅读 · 0 评论 -
调试排错 - Java 问题排查之工具单
Java 在线问题排查主要分两篇:本文是第二篇,通过java调试/排查工具进行问题定位。原创 2025-04-25 10:12:01 · 983 阅读 · 0 评论 -
调试排错 - Java 问题排查之Linux命令
Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查。原创 2025-04-25 10:11:31 · 697 阅读 · 0 评论 -
调试排错 - Java 线程分析之线程Dump分析
Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。原创 2025-04-24 11:04:22 · 537 阅读 · 0 评论 -
调试排错 - Java 内存分析之堆外内存
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。于是修改代码,配置扫包路径,发布上线后内存问题解决。原创 2025-04-24 11:04:02 · 843 阅读 · 0 评论 -
调试排错 - Java 内存分析之堆内存和MetaSpace内存
本文以两个简单的例子(堆内存溢出和MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程。原创 2025-04-23 09:44:04 · 509 阅读 · 0 评论 -
调试排错 - JVM 调优参数
本文对JVM涉及的常见的调优参数和垃圾回收参数进行阐述。原创 2025-04-23 09:43:46 · 852 阅读 · 0 评论 -
GC - Java 垃圾回收器之CMS GC问题分析与解决
自 Sun 发布 Java 语言以来,开始使用 GC 技术来进行内存自动管理,避免了手动管理带来的悬挂指针(Dangling Pointer)问题,很大程度上提升了开发效率,从此 GC 技术也一举成名。GC 有着非常悠久的历史,1960 年有着“Lisp 之父”和“人工智能之父”之称的 John McCarthy 就在论文中发布了 GC 算法,60 年以来, GC 技术的发展也突飞猛进,但不管是多么前沿的收集器也都是基于三种基本算法的组合或应用,也就是说 GC 要解决的根本问题这么多年一直都没有变过。笔者认原创 2025-04-22 10:34:55 · 798 阅读 · 0 评论 -
GC - Java 垃圾回收器之ZGC详解
停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加(对程序吞吐量影响小于15%);支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。GC之痛:介绍实际业务中遇到的GC痛点,并分析CMS收集器和G1收集器停顿时间瓶颈;ZGC原理:分析ZGC停顿时间比G1或CMS更短的本质原因,以及背后的技术原理;ZGC调优实践:重点分享对ZGC调优的理解,并分析若干个实际调优案例;原创 2025-04-21 09:43:42 · 701 阅读 · 0 评论 -
GC - Java 垃圾回收器之G1详解
G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在不断扩大的内存和不断增加的处理器数量,进一步降低暂停时间(pause time),同时兼顾良好的吞吐量。G1垃圾回收器是compacting的,因此其回收得到的空间是连续的。这避免了CMS回收器因为不连续空间所造成的问题。如需要更大的堆空间,更多的floating garbage。原创 2025-04-18 09:27:09 · 765 阅读 · 0 评论 -
GC - Java 垃圾回收基础知识
垃圾收集主要是针对堆和方法区进行;程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。原创 2025-04-18 09:26:48 · 688 阅读 · 0 评论 -
JVM 基础 - Java 内存模型详解
顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。放松程序中写 - 读操作的顺序,由此产生了 total store ordering 内存模型(简称为 TSO)。原创 2025-04-17 09:04:51 · 1435 阅读 · 0 评论 -
JVM 基础 - Java 内存模型引入
现代硬件内存架构与内部Java内存模型略有不同。了解硬件内存架构也很重要,以了解Java内存模型如何与其一起工作。本节介绍了常见的硬件内存架构,后面的部分将介绍Java内存模型如何与其配合使用。这是现代计算机硬件架构的简化图:现代计算机通常有2个或更多CPU。其中一些CPU也可能有多个内核。关键是,在具有2个或更多CPU的现代计算机上,可以同时运行多个线程。每个CPU都能够在任何给定时间运行一个线程。这意味着如果您的Java应用程序是多线程的,线程真的在可能同时运行.原创 2025-04-16 10:18:44 · 694 阅读 · 0 评论 -
JVM 基础 - JVM 内存结构
通过下面两个问题,理解下PC计数器使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢?因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。PC寄存器为什么会被设定为线程私有的?多线程在一个特定的时间段内只会执行其中某一个线程方法,CPU会不停的做任务切换,这样必然会导致经常中断或恢复。原创 2025-04-16 10:18:22 · 849 阅读 · 0 评论 -
JVM 基础 - Java 类加载机制
通常情况下,我们都是直接使用系统类加载器。但是,有的时候,我们也需要自定义类加载器。比如应用是通过网络来传输 Java 类的字节码,为保证安全性,这些字节码经过了加密处理,这时系统类加载器就无法对其进行加载,这样则需要自定义类加载器来实现。自定义类加载器一般都是继承自 ClassLoader 类,从上面对 loadClass 方法来分析来看,我们只需要重写 findClass 方法即可。try {原创 2025-04-15 09:20:58 · 787 阅读 · 0 评论 -
JVM 基础 - 字节码的增强技术
字节码增强技术相当于是一把打开运行时JVM的钥匙,利用它可以动态地对运行中的程序做修改,也可以跟踪JVM运行中程序的状态。此外,我们平时使用的动态代理、AOP也与字节码增强密切相关,它们实质上还是利用各种手段生成符合规范的字节码文件。综上所述,掌握字节码增强后可以高效地定位并快速修复一些棘手的问题(如线上性能问题、方法出现不可控的出入参需要紧急加日志等问题),也可以在开发中减少冗余代码,大大提高开发效率。泽恩,美团点评研发工程师。原创 2025-04-15 09:20:33 · 647 阅读 · 0 评论 -
JVM 基础 - 类字节码详解
源代码通过编译器编译为字节码,再通过类加载子系统进行加载到JVM中运行。原创 2025-04-14 09:26:56 · 1105 阅读 · 0 评论 -
♥JVM相关知识体系详解♥
本系列将给大家构建JVM核心知识点全局知识体系。原创 2025-04-10 15:57:14 · 1312 阅读 · 0 评论