jvm怎么手动释放内存 java的堆内存是如何被回收的?

[更新]
·
·
分类:互联网
4277 阅读

jvm怎么手动释放内存

java的堆内存是如何被回收的?

java的堆内存是如何被回收的?

以常见的CMS收集器进行说明,首先会对堆划分为年轻代和年老代
Young区(年轻代),下面的默认的比例是 8:1:1Edge区To Survivor区From Survivor区Old区(年老代)
对象优先分配在年轻代的Edge区,(如果对象过大,可以直接在old区分配,通过jvm参数可以设置这个阈值)
当Edge区塞不下,就需要回收空间腾地方(即触发一次minorGC),(注意此时To Survivor是空的,From Survivor有存活对象)采用的原则是:
- 将Edge区和From Survivor区存活的对象塞到To Survivor区
- 完事之后,表示清空From Survivor和Edge中需要回收的对象,此时From Survivor就变成了新的 To Survivor区
看到这里一个问题就来了,如果To Survivor也塞不下这些数据怎么办?
此时就需要把Survivor区的对象塞到Old区了,如果Old区也塞不下(没有足够大的连续空间来存储这些对象),在会触发FullGC,FullGC之后还塞不下,那就oom了
所以从上面这个流程中,可以得出一个结论FullGC必然伴随一次MinorGC
额外说一句,内存分配和回收策略的内容并不只是上面这一点,建议看下广受好评的《深入理解Java虚拟机-JVM高级特性与最佳实践》

weblogic内存设置多大合适?

每个weblogic server 都是运行在一个java虚拟机上 ,对weblogic的内存设置也就是对java虚拟机的内存设置。主要设置的为jvm内存,永久内存设置为128m或者256m即可。设置jvm内存时,32位机器最大可启动1.8G内存的jvm,64位机器最大可启动3G内存的jvm;而在设置上下限的时候最好将两者设为一致,以避免浪费频繁的申请和释放内存的开销。MEM_ARGS-Xms512m -Xmx1024m -XX:MaxPermSize128m-Xms512m表示jvm内存下限为512m -Xmx512m表示jvm内存上限为1024m -XX:MaxPermSize128m表示永久内存为128m