![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 81
码拉松
这个作者很懒,什么都没留下…
展开
-
G1垃圾收集器中重要的配置参数及其默认值
G1垃圾收集器中的重要参数配置原创 2022-06-26 10:26:51 · 6796 阅读 · 0 评论 -
万字总结常见JVM垃圾回收面试知识点(附带实际项目案例分析)
前言最近公司上了Prometheus监控之后,暴露了一些与JVM相关的问题,通过沟通与分析,我发现大多数同学对于JVM这一块还是比较陌生的,所以我觉得很有必要普及一下这方面内容,同时又因为问题大多数与垃圾回收相关,所以本文主要也就围绕垃圾回收话题进行展开,希望能够对那些不了解的人有所帮助,尤其是平时缺少实际经验以及可观测环境的同学。......原创 2021-05-20 09:49:20 · 418 阅读 · 1 评论 -
记录一次使用ParallelGC导致线上FGC频繁、耗时长的原因
线上环境JDK1.8 使用默认垃圾收集器:UseParallelGC服务器内存32G(部署了多台服务)线上启动JVM时,未添加任何参数配置。所以默认配置为:Non-default VM flags: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=526385152 -XX:MaxHeapSize=8392802304 -XX:MaxNewSize=2797600768 -XX:MinHeapDel原创 2020-12-17 23:15:57 · 2262 阅读 · 2 评论 -
JVM堆内存分配优化
准备一个小案例,提供一个接口,每次调用都会生成1个1M的对象,然后方法返回,对象由垃圾收集器自动回收。import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class GCController { @RequestMapping("/gcTest")原创 2020-11-26 15:26:02 · 271 阅读 · 0 评论 -
JVM对象TLAB分配、栈上分配性能测试
-XX:-DoEscapeAnalysis -XX:-EliminateAllocations -XX:-UseTLAB -Xlog:c5_gc*public class TestTLAB { //User u; class User { int id; String name; public User(int id, String name) { this.id = id; this.nam原创 2020-11-26 10:45:02 · 286 阅读 · 0 评论 -
JVM缓存行对齐性能优化
缓存行缓存是由多个缓存行组成的,以缓存行为基本单位,一个缓存行的大小一般为64字节。伪共享因为缓存行存在,当不同的线程在操作两份不同的数据时,如果这两份数据刚好位于同一个缓存行中,那么彼此之间就会互相影响。假设A线程操作数据C,B线程操作数据D,C、D数据位于同一缓存行,那么当C数据发生修改时,由于缓存一致性协议的规定,就会造成缓存行失效,那么当B线程操作D数据时,就必须重新加载缓存,尽管B线程之前并没有对D进行过任何操作,同理B线程的操作同样会影响着A线程。缓存行对齐所以为了解决伪共享的问题,原创 2020-11-22 22:24:38 · 301 阅读 · 0 评论 -
深入理解什么是Java双亲委派模型
Java中的类加载器1、启动类加载器 (Bootstrap Class Loader)这个类加载器主要负责加载存放在<JAVA_HOME>\lib目录下的类库。public class TEST_CL{ public static void main(String[] args) { System.out.println(String.class.getClassLoader()); }}输出结果为null,则表示由Bootstrap类加载器加载。2原创 2020-11-20 15:09:45 · 492 阅读 · 1 评论 -
JVM常用垃圾回收器相关参数配置
JVM常用垃圾回收期参数配置原创 2020-09-24 17:39:39 · 854 阅读 · 0 评论 -
JVM垃圾收集器详解之Garbage First(G1)
G1简介G1是一款非常具有特殊意义垃圾收集器的技术发展体现,因为相比G1之前的垃圾收集器,G1首次打破了基于老年代或者新生代一整块内存进行收集的设计思想,G1设计上依然有分代的思想,但是在内存上不在进行分代上的物理划分,也就是在一块大的内存区域中,既有年轻代也有老年代。G1与CMS一样都是追求低停顿时间的垃圾收集器,但是由于G1在设计上的突破,使其能在更大的内存空间回收时,保持优秀的垃圾回收效率,这是G1之前的所有垃圾收集器所不能做到的。G1中的分代设计G1与其他的垃圾收集器相比不再有物理上的区域划原创 2020-09-23 22:08:35 · 405 阅读 · 0 评论 -
JVM垃圾收集器详解之Parallel Scavenge
Parallel Scavenge是一款新生代垃圾收集器,我们非常有必要了解这款垃圾收集器,因为这款收集器可是JDK1.7和JDK1.8默认的新生代垃圾收集器。对于新生代的垃圾回收一般都采用标记-复制算法,Parallel Scavenge也不例外,Parallel Scavenge也与ParNew收集器一样都是能够通过多线程并行收集的,那么Parallel Scavenge与ParNew相比有什么特别之处呢?Parallel Scavenge的特别之处就在于它关注的是吞吐量,也就是运行代码时间与(运行原创 2020-09-22 12:17:46 · 2594 阅读 · 0 评论 -
JVM垃圾收集器详解之CMS
CMS(Concurrent Mark Sweep)是HotSpot虚拟机中第一款实现并发收集的垃圾回收器,是为那些希望使用较短的垃圾收集暂停时间并且可以在应用程序运行时与垃圾收集器共享处理器资源的应用程序而设计的,简单来说,CMS就是追求最短停顿时间的垃圾收集器。CMS主要针对老年代进行垃圾回收,可以配合Serial或者ParNew新生代垃圾收集器进行回收,并且从名字上包含“Mark Sweep”就可以看出CMS收集器是基于标记-清除算法实现的,相对之前的垃圾收集器CMS整个回收过程要稍微复杂一些,大致原创 2020-09-21 20:05:45 · 1345 阅读 · 0 评论 -
jvm自带故障处理工具之jstack
jvm自带故障处理工具之jstack原创 2020-09-19 22:14:59 · 313 阅读 · 0 评论 -
jvm自带故障处理工具之jstat
jstat主要是用来监控虚拟机各种运行状态信息的一种工具,通过jstat命令主要可以用来观察虚拟机在运行时垃圾收集状况,以及类加载和编译状况。命令格式为:jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]下面我们通过几个演示案例,看一下具体的使用方式,环境声明:JDK1.8,使用-XX:+UseSerialGC垃圾回收器常用的命令:jstat -gc pid interval[ms] count示例每一列含义原创 2020-09-18 15:17:03 · 271 阅读 · 0 评论 -
JVM对象内存分配策略详解
JVM中对象分配的原则原创 2020-09-17 17:17:16 · 404 阅读 · 0 评论 -
垃圾回收算法分析与JVM具体应用
JVM垃圾回收算法分析与使用选择原创 2020-09-15 19:36:13 · 240 阅读 · 0 评论 -
JVM中如何判断一个对象是否为可回收
JVM中如何判断一个对象是否为垃圾对象原创 2020-09-08 19:00:59 · 366 阅读 · 0 评论 -
详细图解JVM三色标记法
JVM垃圾回收—三色标记原创 2020-09-08 14:18:37 · 2555 阅读 · 0 评论 -
Java中四种引用类型的分析与应用场景
JVM中四种引用类型的分析与应用场景原创 2020-09-05 22:47:16 · 318 阅读 · 0 评论 -
jvm自带故障处理工具之jmap
jmap是java虚拟机自带的一种内存映像工具。一般通过jmap可以生成堆的当前使用情况的快照,然后用它来分析或者调优JVM内存使用。jmap -helpjmap -histo:live pid打印堆的直方图。对于每个Java类,将打印对象数,以字节为单位的内存大小以及完全限定的类名。VM内部类名称以“ *”前缀打印。如果指定了live子选项,则仅计算活动对象。jmap -heap pid打印heap的使用情况,配置的参数信息,使用的垃圾收集器等信息。MaxHeapSize:最大堆空间N原创 2020-08-10 14:40:15 · 481 阅读 · 0 评论 -
JVM发生OOM问题定位与分析
什么是OOM?原创 2020-08-10 11:01:57 · 2820 阅读 · 0 评论 -
JVM内存结构设计详解
什么是JVM内存结构?Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。为什么要了解JVM内存结构?如果Java和C语言都用过的人就能明显感受到,Java程序写起来方便的多,因为在Java中不需要开发人员为每一个new出来的对象分配内存,以及原创 2020-09-04 13:58:14 · 327 阅读 · 0 评论