首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

内存溢出错误:java堆空间

本文为翻译的文章,作者PANKAJ,原文:

https://www.journaldev.com/21010/java-lang-outofmemoryerror-java-heap-space

当JVM无法分配内存来创建一个对象的时候,java.lang.OutOfMemoryError就被抛出。java.lang.OutOfMemoryError是一种Error并且在运行的时候发生。

java.lang.OutOfMemoryError

就像名称所表明的,当java运行时内存不足的时候,就会发生OutOfMemoryError。在这种情况下,垃圾收集器不能释放程序所需的更多空间,从而导致错误被抛出。

有两种主要原因导致java.lang.OutOfMemoryError:

1. 糟糕的编码 -- 死循环,没有关闭资源以释放内存等等

2. 内存不足 -- java运行的时候所需的内存不足

Java OutOfMemoryError – 糟糕编程示例

我们来看看会抛出以下异常的样例代码:java.lang.OutOfMemoryError: Java heap space,因为这个程序进入了死循环,对象被不断创建但没有被回收。所以JVM最终会耗尽内存。

当上面的代码被执行,一些时间后会抛出以下的异常:

这是一个糟糕编程的示例,好消息是,异常堆栈清楚地给我们指明错误发生的代码位置。然而有时候问题可能是在程序的其他地方,在这种情况下,我们需要象VisualVM这样的java剖析工具来找到哪个地方被分配了最多的内存以及如何来优化它。

Java OutOfMemoryError – 内存不足示例

我们来看看另外一个造成OutOfMemoryError的例子,因为我们没有正确地分配程序所需要的足够的内存。

当我们把JVM的最大内存限制为32MB来运行以上程序的时候,来看看发生了什么。

正如我们看到的,程序没有任何问题,只是我们以较低的内存来运行它。我们尝试把JVM内存从256MB增加到512MB来解决OutOfMemoryError。

当我们提供了足够的内存,这个程序运行得很好。

增加JVM内存是解决这个问题的快速办法,除非是运行在内存非常低的环境上面。如果你已经运行在较高的JVM内存上面,比如2GB或者更多,那么你应该检查程序代码来优化它,观察thread dump和java剖析工具的输出,以便找出你的程序为什么需要那么多内存的原因,以及能否降低所需要的内存。

原创文章,欢迎转载,但请注明出处。

欢迎大家关注本订阅号互联网全栈架构,长按下图即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180622G1QA2F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com