首页 > 编程知识 正文

jvm调优实战,jvm内存分析

时间:2023-05-03 13:07:29 阅读:23698 作者:1162

JVM调谐是一个非常简单复杂的话题,但是经常会遇到这样的问题,所以在这里进行总结。

首先从解决bug开始。 当Java程序申请内存并超出虚拟机的可分配内部纯时,虚拟机可能会首先进行GC。 如果GC结束后还不够,或者可能有直接申请的超充足虚拟机,则抛出内存溢出异常。 虚拟机规格提供的一些异常,包括:

Java.lang.stack overflow error : (轻微) ) ) ) ) ) )。

Java.lang.out of memory error:heapspace (比较常见) ) ) )。

Java.lang.out of memory error 3360 permgenspace (经常出现) )

Java.lang.out of memory error 3360 gcoverheadlimitexceeded ()在某个操作中使用大量内存时发生() ) ) ) ) ) ) ) ) ) )。

以下分别说明。 从最常见的开始吧。

jva.lang.out of memory error 3360 Permgenspace异常常见的情况是JVM中perm内存区域的异常溢出。 缺省情况下,JVM将Perm缺省为64M,因此许多程序需要大量Perm空间中的内存,特别是用于用于框架(如Spring )的动态生成类,这些类由GC自动释放解决方法很简单,增大JVM的-XX:MaxPermSize启动参数就可以解决这个问题。 例如,默认变量通常为64m [ 5.0 and newer :64 bitvmsarescaled 30 % larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.],改为128M即可。 -XX:MaxPermSize=128m。 如果已经是128米(Eclipse已经是128米),则更改为256米。 为了安全起见,我一般在服务器上改为256米。

Java.lang.outofmemoryerror:heapspace和其他out of memory error,这个异常其实和上面的异常是一个异常,但是解决方法不同,所以分开写。 上面的异常是由于JVM的perm区域的内存分区变少引起的。 (JVM的内存划分有young、old、perm种。 此异常是因为JVM堆中的内存或整体点较少。 解决方法是更改-Xms -Xmx启动参数,通常放大一倍。 xms管理启动时的最小内存量,xmx管理管内JVM的最大内存量。

注意:内存外错可能有多种原因,但JVM规范可能存在多种情况,请简要列出。 堆栈:堆栈分区不能动态扩展,或者不足以生成新线程。 Heap:需要更多内存,无法获得。 如果Method Area :不能满足分配需求。 runtimeconstantpool (从方法区域分配内存)不足以创建类或接口。 本机方法堆栈不能动态扩展,也不能生成新的本地线程。

Java.lang.out of memory error 3360 gcoverheadlimitexceeded。 这是JDK6中新添加的错误类型。 GC在花费大量时间释放小空间时发生,是一种保护机制。 我在JSP领导大Excel时遇到过。 最终解决方案是关闭此功能并使用——-xx :-usegcoverheadlimit

最后谈谈java.lang.StackOverflowError。 老实说,这个异常我也没见过。 但是,JVM规范表示,在规范上,有几种情况可能会抛出这种异常。 一个是堆栈线程超出允许范围时,另一个是朴素方法提出更大的请求。根据SUN文档,请提高-XX:ThreadStackSize=512。

总的来说,调整JVM的内存。 组的目的是尽量缩小内存,使程序正常运行,避免抛出内部单纯溢出的错误。 另外,要调整最小存储器、最大存储器的比例,避免在GC时浪费太多时间,特别是要尽量避免FULL GC。

补记: JDK1.4中添加了nio,但nio的buffer分配内存是特殊的。 读/写流可以共享内存。 如果大量数据交互,还可能发生内存错误Java.lang.out。 为相应的JDK添加了特殊参数。 -XX:MaxDirectMemorySize默认为64M,可以像128M一样进行大的更改。

-XX:MaxDirectMemorySize=

specifiesthemaximumamountofmemoryinbytesthatthejavaniolibrarycanallocatefordirectmemorybuffers.thedefaultis 64 megabytes,whi

- xx : maxdirectmemorysize=64m.theuseofdirectmemorybufferscanminimizethecopyingcostwhendoingi/ooperations。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。