android OOM原因有哪些



One common issue that many developers have to address is that of applications that terminate with
java.lang.OutOfMemoryError. That error is thrown when there is insufficient space to allocate an
object. That is, garbage collection cannot make any further space available to accommodate a new object, and
the heap cannot be further expanded. An OutOfMemoryError does not necessarily imply a memory leak. The
issue might simply be a configuration issue, for example if the specified heap size (or the default size if not
specified) is insufficient for the application.
The first step in diagnosing an OutOfMemoryError is to examine the full error message. In the exception
message, further information is supplied after “java.lang.OutOfMemoryError”. Here are some common
examples of what that additional information may be, what it may mean, and what to do about it:



Java heap space
This indicates that an object could not be allocated in the heap. The issue may be just a configuration
problem. You could get this error, for example, if the maximum heap size specified by the –Xmx
command line option (or selected by default) is insufficient for the application. It could also be an
indication that objects that are no longer needed cannot be garbage collected because the
application is unintentionally holding references to them. The HAT tool (see Section 7) can be used to
view all reachable objects and understand which references are keeping each one alive. One other
potential source of this error could be the excessive use of finalizers by the application such that the
thread to invoke the finalizers cannot keep up with the rate of addition of finalizers to the queue. The
jconsole management tool can be used to monitor the number of objects that are pending
finalization.
16 Recommendations Sun Microsystems, Inc.



• PermGen space
This indicates that the permanent generation is full. As described earlier, that is the area of the heap
where the JVM stores its metadata. If an application loads a large number of classes, then the
permanent generation may need to be increased. You can do so by specifying the command line
option –XX:MaxPermSize=n, where n specifies the size.



• Requested array size exceeds VM limit
This indicates that the application attempted to allocate an array that is larger than the heap size. For
example, if an application tries to allocate an array of 512MB but the maximum heap size is 256MB,
then this error will be thrown. In most cases the problem is likely to be either that the heap size is too
small or that a bug results in the application attempting to create an array whose size is calculated to
be incorrectly huge.
Some of the tools described in Section 7 can be utilized to diagnose OutOfMemoryError problems. A few of
the most useful tools for this task are the Heap Analysis Tool (HAT), the jconsole management tool, and the
jmap tool with the –histo option.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值