适用于Android的LibSVM - 垃圾收集延迟

时间:2015-05-21 10:16:25

标签: java android performance garbage-collection libsvm

我正在使用LibSVM.jar并尝试在Android上加载/运行SVM模型。

在加载模型时,垃圾收集器逐渐占用越来越多的时间。加载模型后,在我对任何数据运行之前,GC延迟达到峰值,但垃圾收集器继续频繁运行。我不确定所有内存可能被分配到哪里(然后再被释放)。

模型加载开始时的Logcat输出:

D/dalvikvm( 4958): GC_FOR_ALLOC freed 1883K, 34% free 17922K/26752K, paused 22ms, total 22ms
D/dalvikvm( 4958): GC_FOR_ALLOC freed 1963K, 33% free 18007K/26752K, paused 24ms, total 24ms
D/dalvikvm( 4958): GC_FOR_ALLOC freed 1886K, 33% free 18152K/26752K, paused 26ms, total 26ms
D/dalvikvm( 4958): GC_FOR_ALLOC freed 1943K, 32% free 18257K/26752K, paused 28ms, total 28ms

从模型加载结束时的Logcat输出,在无限期后继续:

D/dalvikvm(12382): GC_FOR_ALLOC freed 4256K, 12% free 75103K/84828K, paused 545ms, total 545ms
D/dalvikvm(12382): GC_FOR_ALLOC freed 5535K, 14% free 73726K/84828K, paused 548ms, total 548ms
D/dalvikvm(12382): GC_FOR_ALLOC freed 4217K, 12% free 75076K/84828K, paused 534ms, total 534ms
D/dalvikvm(12382): GC_FOR_ALLOC freed 5510K, 14% free 73726K/84828K, paused 479ms, total 479ms

我正在尝试分析垃圾收集以尝试找到错误。如果我找到任何东西,将返回此处发布 - 在此期间的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以在Android中使用原始基于c的libsvm的JNI包装,而不是使用.jar文件(由于Java速度慢):https://github.com/yctung/AndroidLibSvm

我已经使用了一段时间,发现速度对于大多数应用来说是完全可以接受的。