有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我的部分代码如下:

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)
  • 操作系统:窗口7(32位/x86)
  • 内存:4gb

错误:当我获取高达50k的数据时,它工作正常。但是,当我获取数据时,它会变得更强大。这给了我一个错误:

#
# 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时,它会引发另一个异常:

java.lang.OutOfMemoryError: Java heap space

共 (1) 个答案

  1. # 1 楼答案

    java.lang.OutOfMemoryError通常是由于缺少所需的堆空间而导致的。您可以做的是使用标志-Xmx1548M增加jvm堆大小,或者将MB增加到1548以上

    但是你的系统内存似乎用完了,所以你应该使用一个更好的JVM来更有效地处理内存,我建议升级JVM。把JVM 1.6升级到更新的版本怎么样