Java技术专题之JVM你的内存泄露了吗?
2023-09-14 08:57:58 时间
一、从一个例子开始
关于JVM的内存泄露,让我们从下面一个例子开始吧,大家来判断一下如果按照下面这种分配方式,会不会出现内存泄露呢?
import java.util.List; import java.util.Vector; public class MemoryTest { * @param args public static void main(String[] args) { // TODO Auto-generated method stub Vector vobj = new Vector(10); for(int i=0;i i++) Object obj = new Object(); vobj.add(obj); //注意此处Java如何清除内存 obj = null; //GC会清除这一块内存吗? System.out.print("end"); }
以上程序不会有任何异常提示,是不是就代表没有内存泄露了呢。如果此时i最大值设为:100000000会怎么样呢?不妨自己跑一下程序,下面是我实测的结果,与具体JVM参数设置有关,各人的极限值可能不同。
1 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 2 at java.util.Arrays.copyOf(Unknown Source) 3 at java.util.Arrays.copyOf(Unknown Source) 4 at java.util.Vector.ensureCapacityHelper(Unknown Source) 5 at java.util.Vector.add(Unknown Source) 6 at MemoryTest.main(MemoryTest.java:14)
出现了内存泄露了吧。但是这种无限放大的方式,只能是事后发现,该出的事情已经出了,应经影响到了生产应用。所以事后检测于事无补。我们还需要另想办法。
二、如何判断是否出现了内存泄露
JVM虚拟机内存的结构上一篇博客已经做了说明,只要Java堆中尚有可用空间,即使泄露也不会出现问题,除非内存空间已经超出JVM内存设置。如果没有设置内存限制,并且内存空间很大的情况下是不会出现错误提示的。这就给我带来了困扰,难道非要等内存不足,发生异常才能发现内存泄露吗?非也。
(1)代码走审:技术要求较高,纯经验法,遗漏可能性较大,可操作性较强,但一般要求互相审查。
(2)工具一 输出JDK的GC日志数据:
设置:JAVA_OPTS增加以下参数打开jdk的GC输出日志:
-verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
(3)jmap获得运行中的JVM内存快照:
jmap -dump:format=b,file=jmap.hprof PID
(4)Eclipse Memory Analyzer:专业工具就是专业; 需要导入jmap.hprof文件,链接地址附上,详细的就不多说了,免得有做广告之嫌。
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。
胖子哥 数据仓库模型设计专家,主要从事金融,互联网行业广告行业数据架构和数据营销。QQ:1106110976
相关文章
- java学习-----jvm的内存分配及运行机制
- Jmeter_Beanshell_使用Java处理JSON块(转)
- Java虚拟机详解----JVM常见问题总结
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
- java实现 洛谷 P1425 小鱼的游泳时间
- Java实现运动员分组
- java对象创建过程(jvm)
- Java虚拟机详解02----JVM内存结构
- (转载)java多态(2)-------Java转型(向上或向下转型)
- 从JVM角度看Java多态(转)
- 【深入理解JVM】:Java内存模型JMM
- K8S java应用jvm内存诊断解决方案:java应用诊断和在线debug利器bistoury介绍及在K8S环境中的使用
- 深入理解java虚拟机(全章节完整)
- Spring Boot 应用监控: Java获取 CPU,内存, JVM 内部运行状况代码
- 【JVM】如果你想学好 Java,怎么可以不懂 JVM 字节码指令集呢?看完这篇文章你将深入理解Java背后的原理
- Java通过PDF模板导出数据 adobe acrobat的PDF编辑器 itextpdf java导出文件输出流
- java-JProfiler(二)-进行本地JVM的性能监控-tomcat
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- 【Java 之 JVM】Java内存结构概述
- Java开发技术之成为高级java工程师必须学习的三个技术
- Eclipse 创建 Java 类
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )
- 【java】Java并发编程--Java实现多线程的4种方式