我的Android应用程序需要很多数组。为防止GC,我开始使用Javolution.arrayFactory
但是如果我alloc
内存在一个线程中调用如下。
byte []buffer = ArrayFactory.BYTES_FACTORY.array(size);
并在另一个线程中释放它,如下所示。
ArrayFactory.BYTES_FACTORY.recycle(buffer);
然后是内存泄漏。我需要库或只是实现数组池的类。
答案 0 :(得分:1)
除了分配大量的byte []之外,通常还有重用它们的方法,而不是动态地回收它们。
e.g。假设你有一个Socket处理程序对象,它有一个byte []。您可以创建一次byte []并在连接的生命周期内保留它。
你可以有一个ByteBuffer,它被分成多个位置,用同一个字节数组创建多个缓冲区。
或者您可以使用您设计的结构存储数据,例如关闭堆内存(我怀疑这对于JVM比对Android更好)
我曾经回收了很多byte[]
,但是在不同的项目中找到了用预先分配的或长期存在的缓冲区替换所有项目的方法,并且它的CPU开销要低得多。