文档介绍:java内存泄露、溢出检查方法和工具JAVA内存泄露、溢岀的检杳方法、丁具介绍问题发现:在我们运行的一个项冃上线运营后发现运行两天左右就会报内存溢出,只有垂启tomcat才能恢复服务,杲常信息如下:::Javaheapspace原因分析:在此Z前必须先介绍一下关于jvm的内存控制,JVM即java虚拟机,它运行时候占用一定的内存,其人小是有限定的,如果程序在运行时jvm占用的内存大于某个限度,则会产生内存溢出,也就是“,outofmemoryerroro如果jvm内存的没有限度,并且有无限大的内存,那jvm就永远不会出现内存溢出了。很明显无限的内存是不现实的,但是一般情况下我们程序运行过程所需要的内存应该是一个基础固定的值,如果仅是因为我们的项目所需内存超过了jvm设置内存值导致内存溢出,那么我们可以通过増大jvm的参数设置來解决内存溢出的问题。详细处理可参考比腹jvm的如下参数设置:-Xms-Xmx-Xmn-Xss-Xms:设置JVM初始内存,此值可以设置与-Xmx相同,以避免每次垃圾冋收完成后JVM重新分配内存。-Xmx:设置JVM最人可用内存。-Xmn:设置年轻代大小,整个堆大小二年轻代大小+年老代大小+,所以增大年轻代后,.-Xss:,,不能无限生成。在jvm参数调试过稈小,发现分配最人内存数超过1G后,仍然会产生内存溢出的现象,而估计其正常分配使用的内存应该不会屆过1G,那么出此可以基本断定其存在内存泄露现象,也就是一些原来分配的不再使用的内存不能被java的垃圾回归所回收,导致不断占川原分配的内存而不禅放,导致不断中请更多的内存玄到超过内存设置而导致内存溢出。Page1of9内存泄露的基本原理:在C++语言程序中,使用new操作符创建的对象,在使用完毕后应该通过delete操作符显示地释放,否则,这些対象将占用堆空间,永远没冇办法得到回收,从而引起内存空间的泄漏。如下的简单代码就可以引起内存的泄漏:在function()方法执行完毕后,vec数组已经是不可达对象,在C卄语言中,这样的对象永远也得不到释放,称这种现象为内存泄漏。而Java是通过垃圾收集器(GarbageCollection,GC)自动管理内存的回收,程序员不需要通过调川函数來释放内存,但它只能冋收无川并且不再被具它对象引用的那些对象所占用的空I'可。在下面的代码中,循环申请Object对象,并将所申请的对象放入一个Vector中,如果仅仅释放对象本身,但是因为Vector仍然引用该对象,所以这个对象对GC来说是不可叵1收的。因此,如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将Vector对象设置为nullo实际上无用,而还被引用的对象,GC就无能为力了(事实上GC认为它还有用),这一点是导致内存泄漏最重要的原因。而我们的项冃町能是存在着内存泄露问题而导致内存