android OOM原因有哪些

来源:互联网 发布:高中封闭式管理 知乎 编辑:程序博客网 时间:2024/04/29 23:56


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.

原创粉丝点击