首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java运行时环境检测到意外错误

Java运行时环境检测到意外错误
EN

Stack Overflow用户
提问于 2014-07-18 05:55:32
回答 2查看 432关注 0票数 0

我正在通过java生成报告(CSV),并使用hibernate从数据库中获取数据。

我的代码的一部分如下:

代码语言:javascript
复制
ScrollableResults items = null;
String sql = " from " + topBO.getClass().getName() + " where " + spec;
StringBuffer sqlQuery = new StringBuffer(sql);
Query query = sessionFactory.getCurrentSession().createQuery(sqlQuery.toString());
items = query.setFetchSize( 1000 ).setCacheable(false).scroll(ScrollMode.FORWARD_ONLY);
list = new ArrayList<TopBO>();
// error occurs in while loop. at the time of fetching more data.
while(items.next())
{           
     TopBO topBO2 =(TopBO) items.get(0); 
     list.add(topBO2 );
     topBO2 = null;
}
sessionFactory.evict(topBO.getClass());

环境信息

  • JVM配置:Xms512M -Xmx1024M -XX:MaxPermSize=512M -XX:MaxHeapSize=1024M
  • JBoss :JBoss 5.1运行时服务器
  • 甲骨文:10g
  • JDK:jdk1.6.0_24(32位/x86)
  • 操作系统:Window 7(32位/x86)
  • Ram:4gb

Error:当我获取高达50k的数据时,它可以正常工作。但是当我获取更多的数据时。它给了我一个错误:

代码语言:javascript
复制
#
# An unexpected error has been detected by Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 4096000 bytes for GrET in C:\BUILD_AREA\jdk6_11\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
#
#  Internal Error (allocation.inline.hpp:42), pid=1408, tid=6060
#  Error: GrET in C:\BUILD_AREA\jdk6_11\hotspot\src\share\vm\utilities\growableArray.cpp
#
# Java VM: Java HotSpot(TM) Client VM (11.0-b16 mixed mode windows-x86)
# An error report file with more information is saved as:
# D:\jboss-5.1.0.GA\bin\hs_err_pid1408.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

设置Xms512M -Xmx768M -XX:MaxPermSize=512M -XX:MaxHeapSize=768M时,它会抛出另一个异常:

代码语言:javascript
复制
java.lang.OutOfMemoryError: Java heap space
EN

回答 2

Stack Overflow用户

发布于 2014-07-18 06:12:29

java.lang.OutOfMemoryError通常是由于缺乏所需的堆空间而引起的。您可以做的是使用标志-Xmx1548M或大于1548 MB来增加jvm堆大小。

但是您似乎没有系统内存了,所以您应该使用更好的JVM来更有效地处理内存,我建议进行JVM升级。如何将您的JVM 1.6升级到更新的版本?

票数 0
EN

Stack Overflow用户

发布于 2014-07-18 06:19:05

这个问题的解决可能是不寻常的。尝试使用OutOfMemoryError:交换空间之外的问题模式文章中的建议。

有多种可能导致本机OutOfMemoryError的场景。

  • 本机堆(C)耗尽是由于部署在单个32位JVM上的Java EE应用程序太多(与大型Java Heap (例如2GB)相结合)*最常见的问题*
  • 本机堆(C)由于非最佳的Java堆大小而耗尽,例如,对于应用程序来说,Java堆太大,无法满足单个32位JVM的需要。
  • 本机堆( create )由于创建的Java线程太多而耗尽,例如允许Java容器在单个32位JVM上创建过多的线程。
  • 操作系统物理/虚拟内存耗尽,防止HotSpot VM将本机内存分配给C(32位或64位VM)
  • 操作系统物理/虚拟内存耗尽,防止HotSpot VM在运行时扩展其Java或PermGen空间(32位或64位VM)
  • C-堆/本机内存泄漏(第三方监视代理/库、JVM错误等)

首先,我建议解决以下问题:

检查JVM内存设置。对于32位VM,2 GB+的Java实际上可以开始在C- Heap上增加压力点;这取决于部署了多少应用程序、Java等…。在这种情况下,请确定是否可以安全地将Java减少256 MB (作为起点),并查看它是否有助于提高JVM内存的“平衡”。

还可以尝试(但在劳动力成本方面)将您的环境升级到64位版本的OS和JVM,因为在x64操作系统上将更好地利用4Gb的物理内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24818108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档