第一篇:java.lang.OutOfMemoryError: Java heap space
Java 应用程序只允许使用有限的内存量。此限制是在应用程序启动期间指定的。为了让事情变得更复杂,Java 内存被分成两个不同的区域。这些区域称为堆空间和 Permgen(用于永久代):
这些区域的大小是在 Java 虚拟机 (JVM) 启动期间设置的,可以通过指定 JVM 参数 -Xmx 和 -XX:MaxPermSize 进行自定义。如果您没有明确设置大小,将使用特定于平台的默认值。
该 java.lang.OutOfMemoryError:Java堆空间 时,应用程序错误将被触发 尝试添加更多的数据放入堆空间区域,但没有足够的空间供它 。
请注意,可能有足够的物理内存可用,但是只要 JVM 达到堆大小限制,就会抛出 java.lang.OutOfMemoryError: Java heap space 错误。
1,是什么原因造成的?
java.lang.OutOfMemoryError 的 最常见原因很简单:您尝试将 XXL 应用程序放入 S 大小的 Java 堆空间中。也就是说 - 应用程序只需要比正常运行可用的更多的 Java 堆空间。此 OutOfMemoryError 消息的其他原因更为复杂,并且是由编程错误引起的:
- 使用量/数据量激增 。该应用程序旨在处理一定数量的用户或一定数量的数据。当用户数或数据量突然激增并超过预期阈值时,在峰值之前正常运行的操作停止运行并触发 java.lang.OutOfMemoryError: Java heap space 错误。
- 内存泄漏 。特定类型的编程错误会导致您的应用程序不断消耗更多内存。每次使用应用程序的泄漏功能时,都会将一些对象留在 Java 堆空间中。随着时间的推移,泄漏的对象会消耗所有可用的 Java 堆空间并触发已经熟悉的 java.lang.OutOfMemoryError: Java heap space 错误。
2,举个例子
第一个例子非常简单——下面的 Java 代码尝试分配一个 2M 整数的数组。当您编译它并使用 12MB 的 Java 堆空间 ( java -Xm