我把" localDb.commit();"在每个" localDb.compact();"之前但仍然有例外:
线程中的异常"线程0" java.lang.IllegalAccessError:不是 空;首先提交,而不是压缩 org.mapdb.StoreWAL.compactPreUnderLock(StoreWAL.java:1100)at org.mapdb.StoreDirect.compact(StoreDirect.java:810)at org.mapdb.EngineWrapper.compact(EngineWrapper.java:130)at org.mapdb.EngineWrapper.compact(EngineWrapper.java:130)at org.mapdb.DB.compact(DB.java:1626)
我的commit(),compact()位于Thread.run()中,我的DBMaker配置是:
DB localDb = DBMaker.newFileDB(new File(filename)).closeOnJvmShutdown().make();
商店面积:471M,包括* .compact,* .compact.p,*。p,*。t java -version:java version" 1.8.0_11" uname -r:2.6.32-279.el6.x86_64
谢谢!
答案 0 :(得分:0)
https://github.com/jankotek/MapDB/issues/463
我通过我的同事的代码审查找到了原因。这是我的错 我将commit()/ compact()放入一个消费者线程,并将queue.offer() 进入生产者线程,由servlet调用;所以" queue.offer()" 可以在" commit()"之间调用。和" compact()"。