
jvm
文章平均质量分 89
爱琴孩
扫盲+科普+解惑,愿天下程序员每天少掉头发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
六年经验,看不懂GC日志?
基于AI的智能分析,支持自动检测内存泄漏、GC暂停原因分析,并提供JVM优化建议。没有"完美"的GC日志,只有适合你应用场景的平衡点。通过持续监控和分析GC日志,你能更好地理解应用的内存行为,做出明智的优化决策。想象一下这样的场景:你的应用在生产环境运行良好,突然某天开始响应变慢,甚至出现OOM崩溃。:开源工具,支持可视化GC日志(如堆内存变化、暂停时间统计),可生成CSV报告和图表。在开始解读之前,先确保你的应用已经正确配置了GC日志记录。:快速分析生产环境日志,无需本地安装,适合非敏感数据环境。原创 2025-05-10 17:25:53 · 956 阅读 · 0 评论 -
CMS那点事
大家好,今天我们来深入探讨JVM垃圾回收机制中备受关注的老年代垃圾回收器——CMS(Concurrent Mark Sweep)。原创 2024-11-10 19:52:26 · 561 阅读 · 0 评论 -
ParNew垃圾回收器深度解析
相信大家对JVM的垃圾回收机制有了更全面的了解。今天,我们聚焦于新生代垃圾回收器ParNew,揭示其多线程回收的奥秘,并探讨其在不同场景下的应用。转载 2024-11-07 23:06:03 · 170 阅读 · 0 评论 -
JVM 如何调优?
这样就降低了对象频繁进入老年代的问题,实际上很多优化都是围绕着如何减少 Full GC 去做的,就是尽可能把短期存活的对象留在 survivor 里,不要进入老年代,这样就可以在 Minor GC 的时候回收掉这些对象,不会产生 Full GC,从而引发 STW,影响系统性能。元空间大小,Meta 区域的大小一定要指定,如果我们代码类或引入动态生成类的技术超过元空间大小,那么会触发 Full GC,可以通过 jstat 命令查看项目生成类的大小来评估具体设置值,一般设置 256M 够了。转载 2024-11-07 22:32:00 · 118 阅读 · 0 评论 -
现网JVM问题排查三板斧
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于我们在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。转载 2024-10-07 13:34:56 · 270 阅读 · 0 评论 -
聊聊G1垃圾收集器
G1垃圾收集器主要用于多处理器、大内存的场景,它有五个属性:分代、增量、并行(大多时候可以并发)、stop the word、标记整理。分代:跟其他垃圾收集器一样,G1把堆分成了年轻代和老年代,垃圾收集主要在年轻代,并且年轻代回收效率最高。偶尔也会在老年代进行回收。增量:为了让垃圾收集时STW时间更短,G1采用增量和分步进行回收。G1通过对应用之前的行为和停顿时间进行分析构建出可预测停顿时间模型,并且利用这个信息来预测停顿时间内的垃圾收集情况。转载 2023-08-05 17:19:04 · 263 阅读 · 0 评论 -
精通JVM监控,不知道JMX?
JMX 全称为 Java Management Extensions,翻译过来就是 Java 管理扩展,用来管理和监测 Java 程序。最常用到的就是对于 JVM 的监测和管理,比如 JVM 内存、CPU 使用率、线程数、垃圾收集情况等等。另外,还可以用作日志级别的动态修改,比如 log4j 就支持 JMX 方式动态修改线上服务的日志级别。最主要的还是被用来做各种监控工具,比如Spring Boot Actuator、JConsole、VisualVM 等。转载 2023-01-18 12:28:45 · 599 阅读 · 0 评论 -
JVM调优(一)
数据类型Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。 基本类型的变量保存原始值,即:他代表的值就是数值本身; 而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAd...转载 2019-01-01 16:16:50 · 168 阅读 · 0 评论 -
研磨java内存模型(三)
前言前面在研磨java内存模型(二)中我们介绍了java内存模型的组成,JVM 内存操作的并发问题,Java 内存间的交互操作。这里最后我们再来一起学习下内存交互基本操作的 3 个特性,happens-before 关系,内存屏障,volatile 型变量,synchronized 的特殊规则。内存交互基本操作的 3 个特性原子性(Atomicity) ,即一个操作或者多个操作要么全部...转载 2018-12-16 11:53:29 · 183 阅读 · 0 评论 -
研磨java内存模型(二)
前言在前面研磨java内存模型(一),我们讲到物理机中遇到的问题,主要有硬件的效率问题,缓存一致性问题 ,代码乱序执行优化问题。下面将从这几个方面来类比介绍java内存模型。1.Java 内存模型的组成分析2.Java 内存间的交互操作Java 内存模型的组成分析内存模型概念我们可以把内存模型理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。不同架构的物...转载 2018-12-14 13:47:28 · 207 阅读 · 1 评论 -
研磨java内存模型(一)
前言对于java内存模型的理解还是很有必要的,有些同学可能会想,这货不就是为了应付面试的时候背背就行了么?是有那么一点道理哈,但是我觉得搞清楚Java内存模型对于自己的深层次理解java还是很有必要的。这里我们不讲解什么java内存模型,我们来看看java内存是在什么应用场景下提出。从物理机类比Java虚拟机硬件的效率问题计算机处理器处理绝大多数运行任务都不可能只靠处理器“计算”就...转载 2018-12-13 22:56:29 · 208 阅读 · 0 评论 -
内存模型如何解决缓存一致性问题
前言我们都知道,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距,提升计算机能力,人们在CPU和主存之间增加了多层高速缓存。每个CPU会有L1、L2甚至L3缓存,在多核计算机中会有多个CPU,那么就会存在多套缓存,那么这多套缓存之间的数据就可能出现不一致的现象。为了解决这个问题,有了内存模型。内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作...转载 2018-08-20 22:18:35 · 1759 阅读 · 0 评论 -
MinorGC和FullGC的触发条件
前言无论是日常工作,还是企业面试,我们都会经常接触到GC。我们都知道GC是java中的垃圾回收策略。GC帮我们省去了很多事。在GC中,我经常听到的就属于MinorGC和FullGC了。那么在什么情况下才会触发这两种GC呢?MinorGC触发条件虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间 1、如果大于的话,直接执行minorGC...转载 2018-09-11 21:59:51 · 3680 阅读 · 3 评论 -
GC日志详解
前言在日常开发或生产环境中,我们会经常遇到OOM。对于OOM,大伙的第一反应就是内存不够了,赶紧加内存。殊不知,有时候就是这简单的加内存,就会在我们的生产环境中埋下一颗雷,说不定哪天就爆了。。当然也有可能人品爆发,短时间相安无事。当然谁也不想自己的项目中会有颗雷。对于OOM往往是我们的代码中出现了内存泄露了,日积月累最终导致了OOM。所以我们需要找到内存泄漏的根本原因。这样才能在源头上避免OO...原创 2018-09-05 22:38:20 · 15620 阅读 · 1 评论 -
Java8内存结构—永久代和元空间
JVM 内存结构根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。1. 虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许的范围,会抛出Stac...转载 2018-09-09 10:30:42 · 288 阅读 · 0 评论 -
并发收集器 CMS
前言CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是尽量减少应用的暂停时间,减少full gc发生的几率,利用和应用程序线程并发的垃圾回收线程来标记清除年老代。在启动JVM参数加上-XX:+Use...转载 2018-09-09 16:28:04 · 562 阅读 · 0 评论 -
聊聊内存泄露和内存溢出
标题在java开发中,估计很少人会去关注GC,因为垃圾回收jvm会自己去做好,不用java开发者去操心,但是jvm真的靠的住吗?为什么我们在日常开发中还是会经常遇到Out of Memery异常,是我们的代码有问题,还是说GC出现问题了,最终导致了内存溢出了呢。这里和大家一起简单学习总结一下jvm内存那些事。JVM内存大致结构JVM启动需要一定的内存区域来保存jvm运行时数据,对于JVM的运行时内存原创 2017-12-09 21:05:26 · 375 阅读 · 0 评论 -
谈谈类加载机制
前言类的加载其实就是将.class文件加载的jvm的内存之中。在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载。JVM启动时会通过不同的类加载器加载不同的类,而且同一个类也不可能由多个加载器来进行加载。正是这种分级加载策略,才能保证各个类在jvm中有条不紊的运行。下面来和大家一起深入学习下java中的类加载。父类委托机制字节码文件是通过JVM中的加载器加载到J...原创 2018-09-13 22:32:09 · 2777 阅读 · 0 评论 -
吃透类加载(上)
前言前面总结的谈谈类加载机制 讲的不是很好,看到老钱写的类加载很详细,这里转载下来以加深理解。ClassLoader 做什么的?顾名思义,它是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 ...转载 2018-12-05 22:18:12 · 206 阅读 · 0 评论 -
吃透类加载(下)
前言在前面吃透类加载(上)大致介绍ClassLoader的特性以及双亲委派机制,下面再深入了解其他特性。Class.forName当我们在使用 jdbc 驱动时,经常会使用 Class.forName 方法来动态加载驱动类。Class.forName("com.mysql.cj.jdbc.Driver");其原理是 mysql 驱动的 Driver 类里有一个静态代码块,它...转载 2018-12-06 13:38:31 · 213 阅读 · 0 评论 -
有趣易懂的内存泄漏分析与实战
前言在地铁上看到的一篇内存泄漏的分析文章,讲的比较简单,这里备份下,有需要的小伙伴可以看看哈!何为内存泄漏和内存溢出内存溢出(OutOfMemory):你只有十块钱,我却找你要了一百块。对不起啊,我没有这么多钱。(给不起) 内存泄露(MemoryLeak):你有十块钱,我找你要一块。但是无耻的博主,不把钱还你了。(没退还) 关系:多次的内存泄露,会导致内存溢出。可以说内存泄漏是导致...转载 2018-08-19 18:45:18 · 450 阅读 · 0 评论