我正在使用许多glib数据结构(GHashTable,GSList等)开发库.我一直在使用valgrind经常检查我的代码是否有内存泄漏.valgrind指出的大多数问题很容易解决,但有一些我无法弄清楚.
所有这些都被报道为"可能丢失".
在valgrind stacktrace的顶部,我总能找到相同的4个库:
==29997== 1,512 bytes in 3 blocks are possibly lost in loss record 24 of 25
==29997== at 0x4004B11: memalign (vg_replace_malloc.c:532)
==29997== by 0x4004B6B: posix_memalign (vg_replace_malloc.c:660)
==29997== by 0x5E9AC4: ??? (in /lib/libglib-2.0.so.0.1200.3)
==29997== by 0x5EA4FE: g_slice_alloc (in /lib/libglib-2.0.so.0.1200.3)
Run Code Online (Sandbox Code Playgroud)
在调用堆栈中,总是调用glib函数,例如g_key_file_new(),g_slist_prepend(),g_strsplit(),g_key_file_load_from_file(),g_file_get_contents().
我的问题是:
有没有人遇到这个并找到了解决方法?
或者这是我可以忽略的东西?是否由于glib使用内存池,如此处所示?
我在用
我在使用Concurrent Mark-Sweep收集器的应用程序的GC日志文件中看到以下症状:
4031.248: [CMS-concurrent-preclean-start]
4031.250: [CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
4031.250: [CMS-concurrent-abortable-preclean-start]
CMS: abort preclean due to time 4036.346: [CMS-concurrent-abortable-preclean: 0.159/5.096 secs] [Times: user=0.00 sys=0.01, real=5.09 secs]
4036.346: [GC[YG occupancy: 55964 K (118016 K)]4036.347: [Rescan (parallel) , 0.0641200 secs]4036.411: [weak refs processing, 0.0001300 secs]4036.411: [class unloading, 0.0041590 secs]4036.415: [scrub symbol & string tables, 0.0053220 secs] [1 CMS-remark: 16015K(393216K)] 71979K(511232K), 0.0746640 secs] [Times: user=0.08 sys=0.00, real=0.08 secs]
Run Code Online (Sandbox Code Playgroud)
预清洁过程不断中止.我已经尝试将CMSMaxAbortablePrecleanTime从默认值5调整为15秒,但这没有帮助.当前的JVM选项如下......
Djava.awt.headless=true
-Xms512m
-Xmx512m
-Xmn128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:BiasedLockingStartupDelay=0
-XX:+DoEscapeAnalysis …Run Code Online (Sandbox Code Playgroud) 我们的应用程序使用 Spring/Hibernate 进行数据库访问。我们使用多个hibernate会话工厂(hibernate3.LocalSessionFactoryBean),因为数据位于多个单独的数据库中。每个会话工厂都使用 c3p0 ( ) 配置了一个池数据源c3p0.ComboPooledDataSource。
事实上,这些数据库都驻留在同一个数据库服务器上。我们的问题是,我们最终会得到许多数据库连接池,所有这些都连接到同一台服务器。有没有一种方法可以共享一个池数据源来访问同一服务器上的多个数据库?是否可以jdbcUrl在会话工厂级别而不是数据源级别进行配置?
或者这在实践中不是一个真正的问题?配置多个数据库连接池是否完全可以?