JVM内存结构问题.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

JVM内存结构问题JVM为两块:PermanentSapce和HeapSpace,其中:

Heap={Old+NEW={Eden,from,to}}。PermantSpace负责保存反射对象,一般不用配置。JVM的Heap区可以通过-X参数来设定。

当一个URL被访问时,内存申请过程如下:

JVM会试图为相关Java对象在Eden中初始化一块内存区域

当Eden空间足够时,内存申请结束。否则到下一步

JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区

Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区

当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)

完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”outofmemory错误”

JVM调优建议:

ms/mx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

SurvivorRatio:设置Survivor空间和Eden空间的比例

内存溢出的可能性

OLD段溢出

这种内存溢出是最常见的情况之一,产生的原因可能是:

设置的内存参数过小(ms/mx,NewSize/MaxNewSize)

程序问题

单个程序持续进行消耗内存的处理,如循环几千次的字符串处理,对字符串处理应建议使用StringBuffer。此时不会报内存溢出错,却会使系统持续垃圾收集,无法处理其它请求,相关问题程序可通过ThreadDump获取(见系统问题诊断一章)单个程序所申请内存过大,有的程序会申请几十乃至几百兆内存,此时JVM也会因无法申请到资源而出现内存溢出,对此首先要找到相关功能,然后交予程序员修改,要找到相关程序,必须在Apache日志中寻找。

当Java对象使用完毕后,其所引用的对象却没有销毁,使得JVM认为他还是活跃的对象而不进行回收,这样累计占用了大量内存而无法释放。由于目前市面上还没有对系统影响小的内存分析工具,故此时只能和程序员一起定位。

Perm段溢出

通常由于Perm段装载了大量的Servlet类而导致溢出,目前的解决办法:

将PermSize扩大,一般256M能够满足要求

若别无选择,则只能将servlet的路径加到CLASSPATH中,但一般不建议这么处理

CHeap溢出

系统对CHeap没有限制,故CHeap发生问题时,Java进程所占内存会持续增长,直到占用所有可用系统内存参数说明:

图表为参数说明对照表 :

JVM堆内存(heap)设置选项

JVM堆内存(heap)设置选项

参数格式

通过这个选项可以设置Java新对象生产堆内存。在通常情况下这个选项的数值为1

024的整数倍并且大于1MB。这个值的取值规则为,一般情况下这个值-XX:NewSize是最

设置新对象生产堆内存

-XX:NewSi

大堆内存(maximumheapsize)的四分之一。增加这个选项值的大小是为了增大较大

(Settingthe

ze

数量的短生命周期对象

Newgenerationheapsize)

增加Java新对象生产堆内存相当于增加了处理器的数目。并且可以并行地分配内存,

但是请注意内存的垃圾回收却是不可以并行处理的

JVM堆内存(heap)设置选项

参数格式 说 明

设置最大新对象生产 通过这个选项可以设置最大Java新对象生产堆内存。通常情况下这个选项的数值

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档