2010-08-09 4 views
2

현재 Android 용 일부 이미지 처리 코드를 구현 중입니다. 나는 메모리 제한에 대해 알고 있고 그 안에 코드를 작성하는 것이 행복하다. 그러나 (힙에) 인스턴스화 할 수있는 주어진 클래스의 각 인스턴스에 대해 사용 된 바이트 수를 계산할 수있는 설명서는 찾을 수 없습니다.Android의 클래스 인스턴스 크기

저는 경험이 많은 C++ 프로그래머입니다. 따라서 C++ 코드 (프로세서 데이터 경로 너비, 플랫폼 정렬 문제 등)를 고려하여 구조체/클래스 크기 조정 문제를 해결하는 데 상대적으로 유능합니다. 나는 자바가 일반적으로 추상화 수준이 높다는 것을 알고 일반 자바 VM을위한 특정 메모리 사용을 보장하지 못할 수도있다. 그러나 안드로이드가 다른 VM에서 실행되고 있다는 것을 감안할 때, 개발자는 강하게 기억에 제약이 있습니다. 주어진 객체 인스턴스의 크기를 계산하기위한 상대적으로 결정적인 규칙 집합이 있다고 가정합니다. 회원.

누구나이 규칙을 알고 있습니까?

감사합니다.

알렉스

답변

2

Dalvikvm 메모리 오버 헤드는 핫 스폿을 포함하는 다른 주류 32 비트 가상 머신과 일치한다.

dalvikvm의 모든 오브젝트에 대한 기본 오버 헤드는 두 개의 32 비트 단어입니다. 여기에 모든 긴 또는 이중 필드에 대해 두 단어를 추가하고 각 다른 필드에 한 단어를 추가하십시오. 정적 필드는이 합계에 포함되지 않습니다.

오버라이드되지 않은 Object.hashCode() 또는 System.identityHashCode()을 호출하여 ID hashCode를 실행하는 경우 추가 오버 헤드가 발생할 수 있습니다.

그리고 개체를 동기화하는 경우 추가 메모리 오버 헤드가 있습니다.

+0

이는 내가 알아야 할 것입니다. 고맙습니다. –