JVM 内存泄露 分析 (史上最全)

您所在的位置:网站首页 jvm图书 JVM 内存泄露 分析 (史上最全)

JVM 内存泄露 分析 (史上最全)

2024-03-01 23:09| 来源: 网络整理| 查看: 265

文章很长,建议收藏起来,慢慢读! 备注:持续更新中…

进大厂、升架构、拿高薪 必备 的 经典图书和资料: 高薪必备1 : 经典图书《Netty Zookeeper Redis 高并发实战》 奉上 NIO、Netty Reactor模式 高性能 底层知识高薪必备2 : 经典图书《SpringCloud、Nginx高并发核心编程》 奉上 微服务、分布式 高并发 底层知识高薪必备3 :来Java高并发研究社群,价值 1000元网盘资源大礼包,免费拿 【博客园总入口 】 推荐2:2021春招月薪过5万 面试题 总目录 搞定下面这些面试题,2021春招月薪过5万(猛!)阿里、京东、美团、头条… 随意挑、横着走!!!Java基础1: JVM面试题(史上最强、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14365820.html2:Java基础面试题(史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14366081.html3:死锁面试题(史上最强、持续更新)[https://www.cnblogs.com/crazymakercircle/p/14323919.html]4:设计模式面试题 (史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14367101.html5:架构设计面试题 (史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14367907.html还有 10 + 篇必刷、必刷 的面试题更多 …, 请参见【 疯狂创客圈 高并发 总目录 】 推荐3: 疯狂创客圈 springCloud 高并发系列 springCloud 高质量 博文 nacos 实战(史上最全) sentinel (史上最全+入门教程) springcloud + webflux 高并发实战 Webflux(史上最全) SpringCloud gateway (史上最全)还有 10 + 篇 必刷、必刷 的高质量 博文更多 …, 请参见【 疯狂创客圈 高并发 总目录 】 JVM性能优化面试题

JVM内存区域常见问题

Java 中会存在内存泄漏吗,简述一下?

Java 内存分配?

Java 堆的结构是什么样子的?

什么是堆中的永久代(Perm Gen space)?

简述各个版本内存区域的变化?

说说各个区域的作用?

JVM的执行子系统常见问题

Java 类加载过程?

描述一下 JVM 加载 Class 文件的原理机制?什么是类加载器?

类加载器有哪些?

类加载器双亲委派模型机制?

垃圾回收常见问题

什么是GC?

为什么要有 GC?

简述一下Java 垃圾回收机制?

如何判断一个对象是否存活?

垃圾回收的优点和原理,并考虑 2 种回收机制?

垃圾回收器的基本原理是什么?

垃圾回收器可以马上回收内存吗?

有什么办法主动通知虚拟机进行垃圾回收?

深拷贝和浅拷贝?

System.gc() 和 Runtime.gc() 会做些什么?

如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?

什么是分布式垃圾回收(DGC)?

它是如何工作的?

串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

在 Java 中,对象什么时候可以被垃圾回收?简述Minor GC 和 Major GC?JVM 的永久代中会发生垃圾回收么?Java 中垃圾收集的方法有哪些?

性能优化常见问题

讲讲你理解的性能评价及测试指标?

常用的性能优化方式有哪些?

什么是GC调优?

JVM调优工具

Jconsole,jProfile,VisualVM

Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里

JProfiler:商业软件,需要付费。功能强大。详细说明参考这里

VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。

JVisualVM初探

​ VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

​ 在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。

​ 可以进行远程和本地监控。远程监控需要打开jmx,下面内容会提到。

​ 其默认页面为:

img

左侧分为本地和远程。双击本地中VisualVM线程,可以看到如下监控内容:

img

具体的介绍参看:

http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。 在这里插入图片描述 如何安装:

1、从主菜单中选择“工具”>“插件”。2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。3、逐步完成插件安装程序。

我这里以 Eclipse(pid 22296)为例,双击后直接展开,主界面展示了系统和jvm两大块内容,点击右下方jvm参数和系统属性可以参考详细的参数信息. 在这里插入图片描述 因为VisualVM的插件太多,我这里主要介绍三个我主要使用几个:监控、线程、Visual GC 监控的主页其实也就是,cpu、内存、类、线程的图表 在这里插入图片描述 线程和jconsole功能没有太大的区别 在这里插入图片描述 Visual GC 是常常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。 在这里插入图片描述 以上的功能其实jconsole几乎也有,VisualVM更全面更直观一些,另外VisualVM非常多的其它功能,可以分析dump的内存快照, dump出来的线程快照并且进行分析等,还有其它很多的插件大家可以去探索 在这里插入图片描述

实战 准备模拟内存泄漏demo

​ 1、定义静态变量HashMap

​ 2、分段循环创建对象,并加入HashMap

​ 代码如下:

import java.util.HashMap; import java.util.Map; public class CyclicDependencies { //声明缓存对象 private static final Map map = new HashMap(); public static void main(String args[]){ try { Thread.sleep(10000);//给打开visualvm时间 } catch (InterruptedException e) { e.printStackTrace(); } //循环添加对象到缓存 for(int i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3