Java短命对象&垃圾收集

时间:2016-06-23 11:50:53

标签: java android performance garbage-collection

我正在评估在垃圾收集和内存占用方面经常(比如每秒)创建小型短期对象的性能影响,尤其是在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);
}

请在这种情况下分享您对情况和任何最佳做法的见解。

1 个答案:

答案 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