![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 86
JVM
Fisher3652
这个作者很懒,什么都没留下…
展开
-
JVM 14:使用MAT分析内存泄漏
使用MAT分析内存泄漏1. 创建springboot工程2. 打成jar包,上传至服务器3. 使用ab进行压测4. 查看日志5. 查看dump日志文件6. 导入MAT7. 原因分析1. 创建springboot工程只有一个controllerpackage cn.enjoyedu.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bin原创 2020-08-23 14:59:25 · 321 阅读 · 0 评论 -
JVM 13:直接内存(堆外内存)
1. 直接内存Java 应用程序通过直接方式从操作系统中申请的内存1.1 直接内存有哪些使用了 Java 的 Unsafe 类,做了一些本地内存的操作;Netty 的直接内存(Direct Memory),底层会调用操作系统的 malloc 函数;JNI 或者 JNA 程序,直接操纵了本地内存,比如一些加密库;JNI 是 Java Native Interface 的缩写,通过使用 Java 本地接口书写程序,可以确保代码在不同的平台上方便移植。JNA(Java Native Acces原创 2020-08-20 17:05:09 · 1395 阅读 · 0 评论 -
JVM 12:内存泄漏分析
内存泄漏1. 内存分析工具1.1 MAT 简介2. MAT 中的 Incoming/Outgoing References2.1 代码示例2.2 incoming references2.3 outgoing references3. MAT 中的浅堆与深堆3.1 案例分析3.2 引用变动的影响1. 内存分析工具使用 jmap –histo 这种命令可以分析哪些对象占据着我们的堆空间。但是那是比较容易分析的问题,如果是遇到内存情况比较复杂 的情况,命令的方式是看不出来的,这个时候我们必须要借助一下工具。原创 2020-08-17 21:35:20 · 510 阅读 · 0 评论 -
JVM 11:CPU占用过高排查
1.CPU占用过高排查思路Top命令分析进程定位CPU占用高的进程用jstack输出线程信息定位占用CPU高的线程解读线程信息,定位具体代码2.代码import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.ThreadP原创 2020-08-17 17:45:28 · 663 阅读 · 0 评论 -
JVM 10:预估调优与问题排查
1.JVM 调优分类JVM 预调优优化 JVM 运行环境(慢、卡顿等)解决 JVM 中的问题(OOM 等)1.1JVM 预调优业务场景设定调优是要分场景的,所以一定要明显你调优项目的场景设定,像现在大家都是微服务架构了,服务拆分出来以后更加适合做场景设定。比如这个服务就注重吞吐量,这个服务注重用户的体验(用户的响应时间)等等。无监控不优化这里的监控指的是压力测试,能够看到结果,有数据体现的,不要用感觉去优化,所有的东西一定要有量化的指标,比如吞吐量,响应时间,服务器资源,网络资源等等。总原创 2020-08-17 15:19:27 · 206 阅读 · 0 评论 -
JVM 9:性能调优之内存优化
1.压测工具 ApacheBenchLinux执行yum -y install httpd-tools命令进行安装安装成功后执行ab命令测试 get 请求接口ab -c 1000 -n 100000 http://127.0.0.1:8080/jvm/heap?userName=test&password=test测试 post 请求接口ab -c 1000 -n 100000 -p ‘post.txt’ -T ‘application/x-www-form-urlencoded原创 2020-08-13 17:43:08 · 408 阅读 · 0 评论 -
JVM 8:GC调优工具
GC调优工具JDK为我们提供的工具1.jps2.jstat3.jinfo4.jmap5.jhat6.jstack命令工具总结7.生产服务器推荐开启8.调优之前开启、调优之后关闭可视化工具9.Jconsole10.visualvmJDK为我们提供的工具1.jps列出当前机器上正在运行的虚拟机进程,JPS 从操作系统的临时目录上去找(所以有一些信息可能显示不全)。-q :仅仅显示进程-m:输出主函数传入的参数-l: 输出应用程序主类完整 package 名称或 jar 完整名称-v: 列出原创 2020-08-11 16:54:18 · 803 阅读 · 0 评论 -
JVM 7:方法的调用
方法的调用1.方法调用的字节码指令2.非虚方法3.虚方法3.1分派3.1.1静态分派3.1.2动态分派3.2接口调用3.3Lambda 表达式3.3.1invokedynamic3.3.2方法句柄(MethodHandle)3.3.3Lambda 表达式的捕获与非捕获1.方法调用的字节码指令关于方法的调用,Java 字节码共提供了 5 个指令,来调用不同类型的方法:invokestatic 用来调用静态方法;invokespecial 用于调用私有实例方法、构造器及 super 关键字等;inv原创 2020-08-03 21:45:43 · 422 阅读 · 0 评论 -
JVM 6:类加载与类加载器
类加载与类加载器1.一个类的生命周期1.1类生命周期 7 个阶段1.2阶段顺序1.3加载的时机1.4验证1.5准备1.6解析1.7初始化1.一个类的生命周期1.1类生命周期 7 个阶段类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、 初始化(Initialization)、使用(Using)和卸载(Unloading)7 个阶段。其中验证、准备、解析 3 个部原创 2020-08-01 23:05:46 · 206 阅读 · 1 评论 -
JVM 5:垃圾回收器-HostSpot的细节实现
垃圾回收器1.三色标记2.三色标记的问题2.1CMS 中的解决方案2.2G1 中的解决方案1.三色标记在三色标记法之前有一个算法叫 Mark-And-Sweep(标记清除)。这个算法会设置一个标志位来记录对象是否被使用。最开始所有的标记位都是 0,如果 发现对象是可达的就会置为 1,一步步下去就会呈现一个类似树状的结果。等标记的步骤完成后,会将未被标记的对象统一清理,再次把所有的标记位 设置成 0 方便下次清理。这个算法最大的问题是 GC 执行期间需要把整个程序完全暂停,不能异步进行 GC 操作。因原创 2020-07-28 19:35:45 · 758 阅读 · 0 评论 -
JVM 4:垃圾回收机制及回收算法
垃圾回收机制及回收算法1.垃圾回收基础知识1.1 GC(垃圾回收)1.2分代回收理论1.3GC 分类2.垃圾回收算法2.1复制算法(Copying)2.2标记-清除算法(Mark-Sweep)2.3标记-整理算法(Mark-Compact)3.JVM 中常见的垃圾回收器3.1Serial/Serial Old3.2Parallel Scavenge(ParallerGC)/Parallel Old3.3ParNew3.4Concurrent Mark Sweep (CMS)3.5Garbage First(原创 2020-07-25 18:13:07 · 244 阅读 · 0 评论 -
JVM 3:对象及引用
JVM 中的对象及引用1.JVM 中对象的创建过程2.对象的内存分配2.1检查加载2.2分配内存2.3内存空间初始化2.4设置2.5对象初始化3.对象的内存布局4.对象的访问定位4.1句柄4.2直接指针5.判断对象的存活5.1引用计数法5.2可达性分析5.3Class回收5.4Finalize 方法6.各种引用6.1强引用6.2软引用SoftReference6.3弱引用WeakReference6.4虚引用 PhantomReference7.栈上分配8.对象的分配策略8.1对象优先在 Eden 区分配8原创 2020-07-22 21:57:22 · 286 阅读 · 1 评论 -
JVM 2:内存区域
JVM 的内存区域1.运行时数据区域2.JAVA 方法的运行与虚拟机栈3.虚拟机栈4.栈帧执行对内存区域的影响5.程序计数器6.本地方法栈7.方法区8.符号引用9.常量池与运行时常量池10.元空间11.堆12.直接内存(堆外内存)1.运行时数据区域运行时数据区的定义:Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。Java 引以为豪的就是它的自动内存管理机制。相比于 C++的手动内存管理、复杂难以理解的指针等,Java 程序写起来就方便的多。所以要深入理解原创 2020-07-18 19:04:55 · 210 阅读 · 1 评论 -
JVM 1:基础知识
一、JVM从编译到执行1.Java 程序的执行过程一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。过程如下:Java 文件->编译器>字节码->JVM->机器码。JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class原创 2020-07-18 18:41:40 · 226 阅读 · 0 评论