把eclipse的内存调大一点,在eclipse的目录下面有一个eclipse.ini文件,打开调一下-XX:MaxPermSize=250m的大小!除了这点以外,如果你的代码写的有问题,那就是需要你自己改下代码的!
『贰』 如何使用VisualVM检测Java内存泄漏
Java的一个重要优点是通过垃圾收集器(Garbage Collection)自动管理内存的回收,程序员不需要关注它。程序员真的不需要关注内存管理吗?只要你碰到过OutOfMemoryError你就知道它不是真的。
这里我会展示如何使用VisualVM快速定位内存泄漏。先看下面这段代码:
importjava.util.List;
importjava.util.ArrayList;
publicclassMemoryLeakDemo{
publicstaticvoidmain(String[]args){
newThread(newMemoryLeak(),"MemoryLeak").start();
}
}
{
publicstaticList<Integer>leakList=newArrayList<Integer>();
publicvoidrun(){
intcount=0;
while(true){
try{
Thread.sleep(3);
}catch(InterruptedExceptione){
}
count++;
Integeri=newInteger(count);
leakList.add(i);
}
}
}
执行下列命令:
java-verbose:gc-XX:+PrintGCDetails-Xmx20mMemoryLeakDemo
等待一段时间后,你会看到:
Exceptioninthread"MemoryLeak"java.lang.OutOfMemoryError:Javaheapspace
atjava.util.Arrays.Of(Arrays.java:3181)
atjava.util.ArrayList.grow(ArrayList.java:261)
atjava.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
atjava.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
atjava.util.ArrayList.add(ArrayList.java:458)
atMemoryLeak.run(MemoryLeakDemo.java:22)
atjava.lang.Thread.run(Thread.java:745)
Heap
PSYoungGentotal3584K,used298K[0x00000000ff980000,0x00000000ffe80000,0x0000000100000000)
edenspace3072K,9%used[0x00000000ff980000,0x00000000ff9ca908,0x00000000ffc80000)
fromspace512K,0%used[0x00000000ffc80000,0x00000000ffc80000,0x00000000ffd00000)
tospace512K,0%used[0x00000000ffe00000,0x00000000ffe00000,0x00000000ffe80000)
ParOldGentotal13824K,used12156K[0x00000000fec00000,0x00000000ff980000,0x00000000ff980000)
objectspace13824K,87%used[0x00000000fec00000,0x00000000ff7df3e8,0x00000000ff980000)
Metaspaceused7993K,capacity8164K,committed8448K,reserved1056768K
classspaceused912K,capacity954K,committed1024K,reserved1048576K
打开VisualVM开始监测MemoryLeakDemo,在Monitor标签页我们可以看到实时的程序内存堆的使用情况:
如上图所示,第1行的Integer对象占用内存最大
『叁』 java内存检测工具JProfiler8.0和eclipse memory analyzer不能用。
java 检测内存还要配置什么玩意? 直接找到你的JDK安装目录 例如:D:\Java\jdk1.6.0_10\bin\
在bin 目录下找到 jvisualvm.exe ; 打开这个玩意,要什么都能监控。
『肆』 如何排查Java内存泄露
1.打开/tomcat_home/bin/catalina.bat文件
2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:heapmp,这样当内存溢出是就会在对应路径下生成mp文件