当前位置:首页 > 内存 > 正文

java内存泄漏怎么定位(java内存泄漏怎么解决)

  • 内存
  • 2024-08-11 20:37:20
  • 5682

一、如何使用VisualVM检测Java内存泄漏

Java的一个重要优点是垃圾收集器(GarbageCollection)自动管理内存回收,而无需程序员关注。程序员真的不需要关注内存管理吗?遇到OutOfMemoryError就证明事实并非如此。

本文向您展示如何使用VisualVM快速查找内存泄漏。首先看一下下面的代码。

导入;
导入ist;
公共类MemoryLeakDemo{
publicstaticvoidmain(String[]args){
newThread(newMemoryLeak(),"MemoryLeak").start();
}
}
classMemoryLeak实现Runnable{
publicstaticListLeakList=newArrayList();
publicvoidrun(){
intcount=0;
while(true){
try{
(3);
}catch(InterruptedExceptione){
}
count++;/>。将显示以下消息一段时间:

线程“MemoryLeak”中出现异常emoryError:Java堆空间
。copyOf()
与()
与ExplicitCapacity()
使用CapacityInternal()
使用()
()
()

PSYoungGen总共3584K,已使用298K[0x00000000ff980000,0x00000000ffe80000,0x0000000100000000)
Eden空间72K,9个使用[0x00000000ff980000,0x00000000ff9ca908,0x00000000ffc80000)空间512K至0%使用率[0x00000000ffc80000,0x00000000ffc80000,0x00000000ffd00000)
空间512K,使用0%[0x00000000ffe00000,0x00000000ffe00000,0x00000000ffe80000)
ParOldGen总计13824K,已使用12156K[0x00000000fec00000,0x00000000ff980000,0x00000000ff980000)
对象空间13824K,已使用87%[0x00000000fec00000,0x00000000ff7df3e8,0x00000000ff980000)
元空间已使用7993K,容量8164K,已提交8448K,保留1056768K
使用类空间912K,容量954K,提交1024K,保留1048576K

打开VisualVM并开始监控MemoryLeakDemo。您可以在“监控”选项卡上查看实时程序内存堆使用情况。

峰谷GC无处不在。换句话说,您可以看到内存使用量只会增加,不会减少。。到底是什么原因?

当您打开“采样器”选项卡并单击“内存”按钮启动内存分析会话时,VisualVM会定期转储所有执行线程,并实时捕获和分析堆栈跟踪信息并显示大量直方图。时间。通过堆直方图,可以看到哪些对象占用了较多内存,可以进一步优化它们。

如上,第一行的Integer对象占用内存最大。