Недостаточно памяти Размер запрошенного массива превышает лимит виртуальной машины. Ошибка при сохранении массива байтов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)
Here the huge byte array is being converted to String. So i need to exclude this from logging
Проблема возникала при сохранении байтового массива размером 2 ГБ как двух частей по 1,7 ГБ и 300 МБ. Размер кучи установлен на 14 ГБ.
Я пробовал использовать фильтр регулярных выражений в свойствах Log4j, он исключает массив байтов из файла журнала, но все равно преобразует этот массив байтов в строку.Мне нужно опустить этот массив байтов или дать собственное имя, например «Регистрация огромного массива» при регистрации массива байтов
Я видел решение, использующее пользовательский тип UserType в значениях трассировки Hibernate параметров оператора, кроме больших двоичных объектов
Его нельзя использовать, поскольку я использую собственный AttributeConverter (CustomArrayCompressionConverter — для сжатия и распаковки перед вставкой в ​​базу данных)
Есть ли другой подход к достижению это

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

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

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

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

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

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

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