私はHibernateエンティティを持っています:
@Entity
class Foo {
//...
@Lob
public byte[] getBytes() { return bytes; }
//....
}
私のVMは512MBの最大ヒープサイズで構成されています。75 MBの大きなオブジェクトを持つオブジェクトを永続化しようとすると、OutOfMemoryErrorが発生します。
スタックトレースのメソッドの名前(StringBuilder、ByteArrayBlobType.toLoggableString、pretty.Printer.toString)は、hibernateがオブジェクトを含む非常に大きなログメッセージを書き込もうとしていることを示しています。
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)