2016-05-04 2 views
0

Я использую jackcess-2.1.1. Я установил параметр memory = false, но все равно столкнулся с ошибкой outOfmemory. Это происходит при обработке файла MDB размером 1,8 ГБ. аргументы памяти JVM имеют максимальный размер 1 ГБ. Если я изменю максимальный размер до 2 ГБ, он не будет работать без проблем. Но согласно инструкции на портале ucanaccess, когда установлено значение memory = false, In-Memory не предполагается использовать, а JVM Memory Args ничего не должен менять.Ucanaccess JDBC Driver - ошибка outofmemory с памятью = ложная настройка

Любой отзыв приветствуется. Найдите ошибку ниже.

java.lang.OutOfMemoryError: Java heap space 
at com.healthmarketscience.jackcess.impl.LongValueColumnImpl.readLongValue(LongValueColumnImpl.java:136) 
at com.healthmarketscience.jackcess.impl.LongValueColumnImpl.read(LongValueColumnImpl.java:90) 
at com.healthmarketscience.jackcess.impl.ColumnImpl.read(ColumnImpl.java:586) 
at com.healthmarketscience.jackcess.impl.TableImpl.getRowColumn(TableImpl.java:767) 
at com.healthmarketscience.jackcess.impl.TableImpl.getRow(TableImpl.java:673) 
at com.healthmarketscience.jackcess.impl.TableImpl.getRow(TableImpl.java:652) 
at com.healthmarketscience.jackcess.impl.CursorImpl.getCurrentRow(CursorImpl.java:699) 
at com.healthmarketscience.jackcess.impl.CursorImpl$BaseIterator.next(CursorImpl.java:822) 
at com.healthmarketscience.jackcess.impl.CursorImpl$BaseIterator.next(CursorImpl.java:1) 
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTableData(LoadJet.java:829) 
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTablesData(LoadJet.java:997) 
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTables(LoadJet.java:1041) 
at net.ucanaccess.converters.LoadJet$TablesLoader.access$2900(LoadJet.java:273) 
at net.ucanaccess.converters.LoadJet.loadDB(LoadJet.java:1479) 
at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:243) 
at java.sql.DriverManager.getConnection(DriverManager.java:571) 
at java.sql.DriverManager.getConnection(DriverManager.java:187) 
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120) 
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) 
at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:76) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132) 
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1825) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1783) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1868) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372) 

ответ

1

Если изменить размер Макс до 2 Гб, она работает без проблем. Но согласно инструкции на портале ucanaccess, когда установлено значение memory = false, In-Memory не предполагается использовать, а JVM Memory Args ничего не должен менять.

Это не совсем так. memory=false сообщает UCanAccess не хранить в базе данных базы данных HSQLDB таблицы, но база данных HSQLDB на диске будет по-прежнему потреблять , и есть много других вещей, которые UCanAccess (и Jackcess) также должны хранить в памяти. Требования к памяти с memory=false будут значительно ниже, чем у memory=true.