我有一个休眠实体:
@Entity
class Foo {
//...
@Lob
public byte[] getBytes() { return bytes; }
//....
}
我的 VM 配置为最大堆大小为 512 MB。当我尝试持久化具有 75 MB 大对象的对象时,我收到 OutOfMemoryError。
堆栈跟踪中的方法名称(StringBuilder、ByteArrayBlobType.toLoggableString、pretty.Printer.toString)表明 hibernate 正在尝试写入包含我的对象的非常大的日志消息。
我对为什么休眠使用这么多内存是正确的吗?解决此问题的最简单方法是什么?
java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:44)
at java.lang.StringBuilder.<init>(StringBuilder.java:81)
at org.hibernate.type.ByteArrayBlobType.toString(ByteArrayBlobType.java:117)
at org.hibernate.type.ByteArrayBlobType.toLoggableString(ByteArrayBlobType.java:127)
at org.hibernate.pretty.Printer.toString(Printer.java:53)
at org.hibernate.pretty.Printer.toString(Printer.java:90)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:97)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.jboss.seam.persistence.HibernateSessionProxy.flush(HibernateSessionProxy.java:181)