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

java查看内存溢出的工具

  • 内存
  • 2024-09-05 09:33:05
  • 2431

一、JAVA参数的多少影响性能?对象参数传递灵活且效率低下,而固定参数传递则僵化且高效。
Java性能测试的工具有很多。这里我要讲一下JProfiler。JProfiler是一个全功能的Java分析工具,专用于分析J2SE和J2EE应用程序。它结合了CPU、执行线程和内存来创建强大的应用程序,JProfiler可以提供多种IDE集成和应用服务器集成目的。JProfiler可以查看当前应用程序的对象、对象引用、内存、CPU使用情况、线程、线程运行状态阻塞、等待、性能瓶颈、内存泄漏、内存泄漏等。,还可以用来查找应用程序内存使用热点,即哪些对象占用了更多的内存,或者CPU热点,即哪些方法占用了更多的CPU资源。这允许您使用HeapWalker作为资源回收器,可以轻松识别内存溢出。堆快照模式允许删除未被引用的对象、稍微被引用的对象或位于终结队列中的对象。


二、内存溢出怎么解决Java中比较常见的内存溢出及解决方案【场景1】:
emoryError:Javaheapspace:这是因为Java堆内存不够。一个原因是实在不够(比如递归层数太多等),另一个原因是程序存在死循环;
如果java堆内存不够,可以通过调整JVM如下配置解决:
<-Xms3062m
<-Xmx3062m
【案例2】
<[说明]:JDK6有新的错误类型是GC抛出很多次来释放一小块空间一般是因为堆太小,导致异常的原因是内存不足。
【解决办法】:
<1.检查系统是否有使用大内存或者无限循环的代码;
<2.通过添加JVM配置来限制内存的使用:
-XX:-UseGCOverheadLimit
[情况3]:
emoryError:PermGenspace:这是因为P区内存不够可以调整JVM配置:
-XX:MaxPermSize=128m
​-XXermSize=128m
​【注意】:
​JVM的Perm区域主要用于在类被加载器加载时存储类和元信息。它将被放置在PermGenspace中。该区域成为老年代,GC在主程序执行过程中不会清理老区域。默认大小为64M,如果超过64M,这部分内存就会溢出。您需要增加内存分配。
[情况4]:
emoryError:Directbuffermemory
调整-XX:MaxDirectMemorySize=参数,例如添加JVM配置:
-XX:MaxDirectMemorySize=128m
【情况5】:
<原因>:堆栈空间不足以创建更多线程,要么创建的线程太多,要么堆栈空间不足真的很小。
【解决办法】:由于JVM没有提供设置堆栈总大小的参数,因此可以设置单个线程堆栈的大小,系统总用户空间为3G,text/除外;Data/BSS/MemoryMappingSegments此外,Heap和Stack空间的总量是有限的,并且会增长和减少。因此,如果遇到这个错误,可以通过两种方式解决:1、通过启动参数-Xss减小单个线程堆栈的大小,这样就可以开启更多的线程(当然也不能太小,太小了)会导致StackOverflowError2.通过-Xms-Xmx两个参数减少堆大小,将内存让给栈(假设堆空间足够)。
[情况6]:
verflowError
【原因】:这也是一种内存溢出错误,即线程堆栈溢出,或者方法调用的层次过多(例如,有无限递归调用),或者线程栈太小。
【解决办法】:优化程序设计,减少方法调用次数,调整-Xss参数,增大线程栈大小。
三、java内存快照快速启动快照是Java程序运行时拍摄的内存快照。它用于在程序运行时查看有关对象及其在动态内存中的状态的信息。
要快速运行Java内存快照,必须执行以下操作:
从命令行运行Java程序时,必须使用-XX:+HeapDumpOnOutOfMemoryError参数。当程序检测到内存溢出时,这将自动创建内存快照。
当程序检测到内存溢出时,会在程序所在目录中创建一个hprof文件。该备份文件是内存的快照。
使用工具打开和查看hprof文件。