内存的调优
分类:weblogic/tomcat2011-09-23 17:03968 人阅读评论(0)收藏举报
一.JVM 内存的设置的原理
默认的 java 虚拟机的大小比较小,在对大数据进行处理时 java 就会报错:
java.lang.OutOfMemoryError。设置 jvm 内存的方法,对于单独的.class,可以用下面的方法对
Test 运行时的 jvm 内存进行设置。
java -Xms64m-Xmx256mTest
-Xms 是设置内存初始化的大小
-Xmx 是设置最大能够使用内存的大小(最好不要超过物理内存大小)
在 weblogic 中,可以在 startweblogic.cmd 中对每个 domain 虚拟内存的大小进行设置,默认的
设置是在 commEnv.cmd 里面。
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
下面是这几个设置的一些背景知识:
堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是
在Java 虚拟机启动时创建的。”“在 JVM 中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出 JVM 主
要管理两种类型的内存:堆和非堆。简单来说堆就是 Java 代码可及的内存,是留给开发人员使用的;非堆就是
JVM 留给自己用的,所以方法区、JVM 内部处理或优化所需的内存(如 JIT 编译后的代码缓存)、每个类结构(如运
行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM 初始分配的内存由-Xms 指定,默认是物理内存的 1/64;JVM 最大分配的内存由-Xmx 指定,默认是物理内
存的 1/4。默认空余堆内存小于 40%时,JVM 就会增大堆直到-Xmx 的最大限制;空余堆内存大于 70%时,JVM
会减少堆直到-Xms 的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次 GC 后调整堆的大小。
非堆内存分配
JVM 使用-XX:PermSize 设置非堆内存初始值,默认是物理内存的 1/64;由 XX:MaxPermSize 设置最大非堆内
存的大小,默认是物理内存的 1/4。
JVM 内存限制(最大值)
首先 JVM 内存首先受限于实际的最大物理内存,假设物理内存无限大的话,JVM 内存的最大值跟操作系统有很大
的关系。简单的说就 32 位处理器虽然可控内存空间有 4GB,但是具体的操作系统会给一个限制,这个限制一般是
2GB-3GB(一般来说 Windows 系统下为 1.5G-2G,Linux 系统下为 2G-3G),而 64bit 以上的处理器就不会
有限制了
JVM 内存的调优
1. Heap 设定与垃圾回收 Java Heap 分为 3 个区,Young,Old 和 Permanent。Young 保存刚实例化的对象。当该
区被填满时,GC 会将对象移到 Old 区。Permanent 区则负责保存反射对象,本文不讨论该区。JVM 的 Heap 分配
可以使用-X 参数设定,
评论1