Недостаточно памяти Размер запрошенного массива превышает лимит виртуальной машины. Ошибка при сохранении массива байтовJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Недостаточно памяти Размер запрошенного массива превышает лимит виртуальной машины. Ошибка при сохранении массива байтов

Сообщение Anonymous »

Код: Выделить всё

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.base/java.util.Arrays.copyOf(Arrays.java:3745 undefined)
at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:169 undefined)
at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:772 undefined)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:248 undefined)
at java.base/java.util.Arrays.toString(Arrays.java:4988 undefined)
at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.extractLoggableRepresentation(PrimitiveByteArrayTypeDescriptor.java:63 undefined)
at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.extractLoggableRepresentation(PrimitiveByteArrayTypeDescriptor.java:26 undefined)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:70 undefined)
at org.hibernate.type.descriptor.converter.AttributeConverterSqlTypeDescriptorAdapter$1.bind(AttributeConverterSqlTypeDescriptorAdapter.java:88 undefined)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280 undefined)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275 undefined)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:39 undefined)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2879 undefined)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3176 undefined)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3699 undefined)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90 undefined)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604 undefined)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478 undefined)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356 undefined)
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:50 undefined)
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1418 undefined)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1504 undefined)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1561 undefined)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1529 undefined)
at org.hibernate.query.Query.getResultList(Query.java:168 undefined)
at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:76 undefined)
Вышеуказанная ошибка возникает при сохранении указанного ниже объекта

Код: Выделить всё

@Table(name = "FILE_DATA")
public class FileData
{

@Id
@Column(name= "ID")
private Long id;

@Convert(converter = CustomArrayCompressionConverter.class)
@Column(name = "CONTENT")
private byte[] content;
}
Типы данных БД для

Код: Выделить всё

TABLE [FILE_DATA] -
[ID] [numeric](10) NOT NULL PRIMARY KEY, 

Код: Выделить всё

[CONTENT] [varbinary](max) NOT NULL

Код: Выделить всё

org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.extractLoggableRepresentation(PrimitiveByteArrayTypeDescriptor.java:63)
Здесь огромный массив байтов преобразуется в строку. Поэтому мне нужно исключить это из журнала.
Проблема возникала при сохранении байтового массива размером 2 ГБ как двух частей по 1,7 ГБ и 300 МБ. Размер кучи установлен на 14 ГБ.
Я попробовал использовать фильтр регулярных выражений в свойствах Log4j, он исключает массив байтов из файла журнала, но все равно преобразует этот массив байтов в строку.
Мне нужно опустить этот массив байтов или дать собственное имя, например «Регистрация огромного массива», при регистрации массива байтов/
Я видел решение с использованием пользовательского типа пользователя в значениях трассировки параметров оператора Hibernate, кроме больших двоичных объектов, но его нельзя использовать, поскольку я использую собственный AttributeConverter (CustomArrayCompressionConverter - для сжатия и распаковки перед вставкой в ​​базу данных)
Есть ли другой подход добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ile-saving
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»