我正在评估在垃圾收集和内存占用方面经常(比如每秒)创建小型短期对象的性能影响,尤其是在Android Java实现上。
进一步详细说明,我们有一个应用程序,它在线程中接收来自网络的频繁更新,并以小结构传递给应用程序。在C中,我们创建一个类型结构的局部变量,并将其传递给
void passToApp(int a, int b, int c) {
AppStruct p;
p.a = a;
p.b = b;
p.c = c;
appFunction(&p);
}
这不是C中的问题,因为p在堆栈中。但是在java中,需要分配每个对象,然后由GC释放。
void passToApp(int a, int b, int c) {
AppStruct p = new AppStruct();
p.a = a;
p.b = b;
p.c = c;
appFunction(p);
}
请在这种情况下分享您对情况和任何最佳做法的见解。
答案 0 :(得分:0)
您可以制作所有这样的对象
private class AppStruct{
boolean used;
public void release() {
used = false;
}
};
private final static int MAX_COUNT = 100;
private final AppStruct[] pool = new AppStruct[MAX_COUNT];
public AppStruct obtain() {
for (int i = 0; i < pool.length; ++i){
if (!pool[i].used) {
pool[i].used = true;
return pool[i];
}
}
// max count is set wrong
return new AppStruct();
}
这只是一个简单的例子,你应该制作清单或其他东西。
主要思想是制作final
对象,它只会被创建一次,这对于GC来说是可以的。最好不要创建许多对象,因为它可能会滞后UI线程并减慢FPS