在这里发布,因为我找不到lmdb键值存储的任何论坛。
子数据库有限制吗?可以同时打开多少个子数据库?
我想拥有约200个数据库,这似乎很多,并且清楚地表明我的模型是错误的。我想可以将每个数据库的ID重构并嵌入到密钥本身中,并只保留一个数据库,但是我的密钥更长,而且如果需要,也无法删除数据库。
我很感兴趣,但是LMDB是否已经对密钥使用了某种内部前缀。任何建议,以解决该问题表示赞赏。
我正在用C代码调用Java方法.每次调用时我都调用AttachCurrentThread,调用完成后调用DetachCurrentThread.
这工作正常,但问题是我看到由此引起的垃圾收集,即几乎每次通过JNI调用.次要集合上的VisualVM图基本上都是绿色的!从本机代码到Java的调用速率是每秒数百.在那些调用期间,我也可以看到创建过多的Java线程,如Thread-34543,Thread-34544,Thread-34545等,这可能是GC的原因.看起来每个调用都是通过不同的线程完成的.
有谁见过这个?
只是在我没有DetachCurrentThread时添加到那里,根本没有GC,但VisualVM中的Thread视图显示连接到VM的数百个线程.有小费吗?
JVM设置
-Xms2048m -Xmx2048m -XX:MaxDirectMemorySize = 256M -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false -Dcom. sun.management.jmxremote.port = 3333
平台:Ubuntu 12.04 Linux 3.2.0-35-generic#55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Java的:
OpenJDK运行时环境(IcedTea6 1.11.5)(6b24-1.11.5-0ubuntu1~12.04.1)OpenJDK 64位服务器VM(内置20.0-b12,混合模式)
更新2013-03-30
我认为我的问题出在其他地方.我打印出线程的ID,看起来只有少数线程正在调用我的JNI代码.上次运行显示13个线程.事情就是跑步的时候
if ((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_4) == JNI_OK)
return env;
else
return NULL;
Run Code Online (Sandbox Code Playgroud)
获取与当前线程关联的JNIEnv*我得到错误代码-2(JNI_EDETACHED).为了清楚起见我根本没有调用DetachCurrentThread,因为我期望这些线程回到我的本机库.在这种情况下,我再次附加本机线程,这可能导致在JVM中创建过多的线程abject.上次运行显示
29 [478e](get_env) Thread 2633996032 has env: (nil), err was: -2
47 [478e](get_env) Thread 2642388736 has env: (nil), err was: -2
32 [478e](get_env) …Run Code Online (Sandbox Code Playgroud)