2016-06-23 3 views
2

가비지 콜렉션 및 메모리 풋 프린트에서, 특히 Android Java 구현에서 작은 단 수명 오브젝트 (예 : 매 초마다)를 자주 작성하면 성능에 미치는 영향을 평가합니다.자바 단편 오브젝트 및 가비지 콜렉션

더 자세히 설명하기 위해 네트워크에서 잦은 업데이트를 스레드에서받는 응용 프로그램이 있으며 작은 구조로 응용 프로그램에 전달됩니다. C에서 타입 구조의 지역 변수를 만들고 그것을 전달하십시오.

void passToApp(int a, int b, int c) { 

    AppStruct p; 
    p.a = a; 
    p.b = b; 
    p.c = c; 
    appFunction(&p); 
} 

이것은 p가 스택에있을 때 C에서 문제가되지 않습니다. 그러나 자바에서는 모든 객체를 할당 받아 나중에 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

[프로필과 문제가 있는지 확인] (http://programmers.stackexchange.com/questions/80084/is-premature -optimization-really-the-all-evil)을 사용합니다. 충격은 초당 1 회만 발생하면 0이됩니다. – zapl

+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 속도를 늦출 수 있기 때문에 더 많은 객체를 만들지 않는 것이 좋습니다.