1 为什么要自己设置内存
答:为了更好的利用内存,减少不必要的浪费。
有一个项目 service,没配置,我服务器内存16G,因为所有的项目都依赖这个项目,所以这个项目一般首先启动。
以为他启动的时候内存比较多,所以他就乱来了。 old 老生代内存给配了1.7G(虽然我top的时候整个项目才占用了1.5,不知道1.7G在哪来的,可能是有虚拟内存吧)
使用率只有3%,太TMD浪费了,还有持久化区居然400多M,这个项目128M足够,为了靠谱我打算给他配200m。
jmap –heap pid
由现在运行状况来看,eden 新生代伊甸园 给他配个600m 即可 from space 和 to space 各 100m 这两个区域是执行GC的时候使用)。
http://www.cnblogs.com/zxf330301/articles/5252728.html 可以参考这个文章了解GC详情
-Xmn800m(新生代一共多少---对XX:newSize、-XX:MaxnewSize两个参数的同时配置) -XX:SurvivorRatio:6 (算法为 800m/(设置的值+2) * 6 = 600m 伊甸园区,然后from 和to各占用1)
old给他200M即可。持久区一共200m. --- 一般总有引用GC(死神)老杀不死的内存会进入old区, 并且 一上来分配连续的特别大的 内存 比如大数组 会直接分配到old区
持久区200m -- class的信息,static findl 引用的都会放在这里。
-XX:PermSize=200M
XX:MaxPermSize200M
最后最大内存= 200m 持久+800m新生代+200m老年代 = 1.2G
-Xms1200m -Xmx1200m
综上
new的比较多的给新生代多些内存。
arraylist 和数组 用的多的多给点old
static 和 类(包含引用的jar)比较多的,多给点 Perm
弄完了之后old居然是400m,我在看看其他资料。。。别的都正常