JVM学习心得
JVM学习心得
进京务工小卢
不爱敲代码 就爱小彬彬的小卢同学
展开
-
JVM系列
1原创 2022-02-13 21:32:21 · 688 阅读 · 0 评论 -
(零)最全JVM知识点
原创 2022-02-01 00:26:44 · 274 阅读 · 0 评论 -
(十二)MAT分析工具
0.0原创 2020-12-01 00:29:55 · 258 阅读 · 0 评论 -
(十一)线上CPU飙升
现在的互联网服务,一般都做了负载均衡。如果一个实例发生了问题,不要着急去重启。万能的重启会暂时缓解问题,但如果不保留现场,可能就错失了解决问题的根本,担心的事情还会到来。所以,当实例发生问题的时候,第一步是隔离,第二步才是问题排查。什么叫隔离呢?就是把你的这台机器从请求列表里摘除,比如把 nginx 相关的权重设成零。在微服务中,也有相应的隔离机制,这里默认你已经有了(面试也默认你已经有隔离功能了)。1. GC 引起 CPU 飙升我们有个线上应用,单节点在运行一段时间后,CPU 的使用..原创 2020-12-01 00:27:07 · 457 阅读 · 0 评论 -
(十)手动模拟JVM内存溢出
我们主要自己模拟一个 JVM 内存溢出的场景。在模拟 JVM 内存溢出之前我们先来看下这样的几个问题。老年代溢出为什么那么可怕? 元空间也有溢出?怎么优化? 如何配置栈大小?避免栈溢出? 进程突然死掉,没有留下任何信息时如何进行排查?年轻代由于有老年代的担保,一般在内存占满的时候,并没什么问题。但老年代满了就比较严重了,它没有其他的空间用来做担保,只能 OOM 了,也就是发生 Out Of Memery Error。JVM 会在这种情况下直接停止工作,是非常严重的后果。OOM 一般是内存泄漏原创 2020-11-26 23:54:26 · 324 阅读 · 0 评论 -
(九)GC日志详解分析
俗话说得好,有问题先看日志!!!JDK8中使用的配置:-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCApplicationStoppedTime-XX:+PrintTenuringDistribution-Xloggc:/tmp/logs/gc_%p.log-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/tmp/logs-XX:ErrorFi...原创 2020-11-25 01:26:23 · 1911 阅读 · 0 评论 -
(八)JVM线上评估流量和调优
我们知道,垃圾回收器一般使用默认参数,就可以比较好的运行。但如果用错了某些参数,那么后果可能会比较严重,我不只一次看到有同学想要验证某个刚刚学到的优化参数,结果引起了线上 GC 的严重问题。所以你的应用程序如果目前已经满足了需求,那就不要再随便动这些参数了。另外,优化代码获得的性能提升,远远大于参数调整所获得的性能提升,你不要纯粹为了调参数而走了弯路。那么,GC 优化有没有可遵循的一些规则呢?这些“需求”又是指的什么?我们可以将目标归结为三点:系统容量(Capacity) 延迟(Laten.原创 2020-11-24 01:19:07 · 209 阅读 · 0 评论 -
(七)详解G1GC
垃圾有限原创 2020-11-22 15:21:05 · 1124 阅读 · 0 评论 -
(六)详解CMS
首先介绍几个概念: Minor GC:发生在年轻代的 GC。 Major GC:发生在老年代的 GC。 Full GC:全堆垃圾回收。比如 Metaspace 区引起年轻代和老年代的回收。 CMS 的全称是 Mostly Concurrent Mark and Sweep Garbage Collector(主要并发标记清除垃圾收集器),它在年轻代使用复制算法,而对老年代使用标记-清除算法。你可以看到,在老年代阶段,比起 Mark-Sweep,它多了一个并发字样。.原创 2020-11-22 15:15:57 · 1307 阅读 · 0 评论 -
(五)JVM垃圾回收器
标记 清除 复制 整理原创 2020-11-22 01:08:34 · 316 阅读 · 0 评论 -
(四)jvm存活对象+引用类型(强软弱虚)
JVM 的 GC 动作,是不受程序控制的,它会在满足条件的时候,自动触发。GC Roots(可达性分析法)有哪些GC Roots 是一组必须活跃的引用。用通俗的话来说,就是程序接下来通过直接引用或者间接引用,能够访问到的潜在被使用的对象。GC Roots 包括:Java 线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值等。也就是与我们栈帧相关的各种引用。 所有当前被加载的 Java 类。 Java 类的引用类型静态变量。 运行时常量池里的引用类型常量(Stri..原创 2020-11-22 00:53:29 · 172 阅读 · 1 评论 -
(三)jvm字节码运行解析
javap原创 2020-11-21 00:13:18 · 136 阅读 · 0 评论 -
(二)JVM类加载以及双亲委派
速记秘诀:家宴准姐出(加载,验证,准备,解析,初始化)类加载机制加载将外部的 .class 文件(属于二进制数据,保存在jar或war里面),加载到 Java 的方法区内。验证并不是所有的 .class 文件都能加载到虚拟机中,容易受到攻击。验证阶段在虚拟机整个类加载过程中占了很大一部分,不符合规范的将抛出 java.lang.VerifyError 错误。像一些低版本的 JVM,是无法加载一些高版本的类库的,就是在这个阶段完成的。准备为一些类变量分配内存并.原创 2020-11-21 00:10:12 · 282 阅读 · 0 评论 -
(一)JVM内存管理
为什么要了解JVM的内存区域??因为JAVA最引以为豪的就是自动内存管理机制。相比较于C++手动管理内存,复杂的指针处理,JAVA使用更方便。这就是有点也是缺点(对于内存极其敏感的程序难以控制内存管理)。JVM 内存区域划分如图所示,从图中我们可以看出: JVM 堆中的数据是共享的,是占用内存最大的一块区域。 可以执行字节码的模块叫作执行引擎。 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器。 JVM 的内存划分与多线程是息息相关的。像我们程序中运...原创 2020-11-20 14:34:17 · 544 阅读 · 1 评论