我的android应用程序需要很多数组。为了防止GC,我开始使用Javolution.arrayFactory。
但是如果我在一个线程中调用alloc内存,就像下面这样。
byte []buffer = ArrayFactory.BYTES_FACTORY.array(size); 并在另一个线程中释放它,如下所示。
ArrayFactory.BYTES_FACTORY.recycle(buffer); 那么它就会导致内存泄漏。我需要库或者只是实现数组池的类。
发布于 2012-08-07 16:20:46
与分配大量byte[]不同,通常有重用它们的方法,而不是动态回收它们。
例如,假设你有一个套接字处理程序对象,它有一个byte[]。您可以只创建一次byte[],并将其保留到连接的整个生命周期。
您可以将一个ByteBuffer拆分到多个位置,以使用相同的字节数组创建多个缓冲区。
或者您可以使用自己设计的结构来存储数据,比如堆外内存(我怀疑这在JVM上比在Android上更有效)。
我过去常常回收大量的byte[],但随着时间的推移,我在不同的项目中找到了用预先分配或长期使用的缓冲区替换它们的方法,这大大降低了CPU的开销。
https://stackoverflow.com/questions/11840687
复制相似问题