休眠-java.lang.OutOfMemoryError:Java堆空间

如何解决休眠-java.lang.OutOfMemoryError:Java堆空间?

开发过程中遇到休眠-java.lang.OutOfMemoryError:Java堆空间的问题如何解决?下面主要结合日常开发的经验,给出你关于休眠-java.lang.OutOfMemoryError:Java堆空间的解决方法建议,希望对你解决休眠-java.lang.OutOfMemoryError:Java堆空间有所启发或帮助;

问题描述

我从这种事情的多年痛苦中得到了一个提示:答案通常会仔细地隐藏在堆栈跟踪的前10行中的某个位置。始终多次读取堆栈跟踪,如果没有提供足够的帮助,请读取发生故障的方法的源代码

在这种情况下,问题出在Hibernate漂亮打印机中的某个地方。这是一个日志记录功能,因此问题在于Hibernate试图记录一些巨大的字符串。请注意,在尝试增加StringBuilder的大小时它如何失败。

为什么要尝试记录巨大的字符串?我不能从您提供的信息中说出来,但是我想您的组织实体中有很大的内容(也许是BLOB吗?),Hibernate尝试记录查询已从数据库中拉出的对象。映射中也可能是错误的,因为渴望进行提取会拉入许多相关的对象- 例如,由于错误的外键定义,导致加载整个表的子集合。

如果映射错误,则修复映射将解决问题。否则,最好选择关闭此特定的日志记录功能。在一个非常相似的问题上存在一个现有的问题,答案中有一些有用的建议。

解决方法

我得到这个例外:

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2882)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
    at java.lang.StringBuilder.append(StringBuilder.java:119)
    at java.util.AbstractMap.toString(AbstractMap.java:493)
    at org.hibernate.pretty.Printer.toString(Printer.java:59)
    at org.hibernate.pretty.Printer.toString(Printer.java:90)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:97)
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

在此代码:

Query query = null;
        Transaction tx= session.beginTransaction();
        if (allRadio.isSelected()) {
            query = session.createQuery("select d from Document as d,d.msg as m,m.senderreceivers as s where m.isDraft=0 and d.isMain=1 and s.organization.shortName like '" + search + "' and s.role=0");
        } else if (periodRadio.isSelected()) {
            query = session.createQuery("select d from Document as d,m.senderreceivers as s where m.isDraft=0 and d.isMain=1 and s.organization.shortName like '" + search + "' and s.role=0 and m.receivingDate between :start and :end");
            query.setParameter("start",start);
            query.setParameter("end",end);
        }
        final List<Document> documents = query.list();


        query = session.createQuery("select o from Organization as o");
        List<Organization> organizations = query.list(); <---AT THIS LINE
        tx.commit();

我连续2次查询。如果我评论其中之一,其他工作正常。

如果我删除交易,那么事物异常便消失了。这是怎么回事?这是内存泄漏之类的吗?提前致谢。

编程问答相关问答

我的环境详情: <ul> <li>操作系统:Ubuntu 20.04</li> <li>节点版本:9.6.1</li> <li>Qt 版本:5.9.1</li> </ul> 我
此问题使用 <a href="https://people.ucsc.edu/%7Emclapham/eart125/data/georoc.csv" rel="nofollow noreferrer">https://people.ucsc.edu/~
对不起,我正在绞尽脑汁想办法解决这个问题。 我的 kafka 代理说等待连接到 Zookeper 然后关闭(超时)
我有一个 pypsark 数据框保存为 <code>temp_view</code>,我需要将它保存到 <code>Table2</code> 中的 <code>DB2</code>
我想在 <a href="https://www.brightsign.biz/digital-signage-products/XT-product-line/XT1144" rel="nofollow noreferrer">BrightSign XT114
我对 sql 很陌生,一直在尝试使用以下脚本对其进行参数化。 <strong>这是我的代码:</strong> <pre><
<ol> <li>现在我正在考虑为 android 开发一个应用程序并想要获取位置信息。</li> <li>所以我决定使用 xamarin 的
我正在使用 TestNg 运行并行测试,我想在脚本中的某些点停止/终止线程。这个脚本有很多层,所以简单
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注