2011-01-19 10 views
5

저는 ArrayList<Obj>이며 사용중인 메모리의 양을 알고 싶습니다.Java의 ArrayList의 메모리 크기는 무엇입니까

Obj은 변형되었으므로 객체의 크기 당 배열의 요소 수를 곱하기가 쉽지 않습니다.

+3

참조 http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object –

답변

3

개체의 콘텐츠 배포를 알면 무작위로 계산할 수 있습니다.

그러나 내가 생각할 수있는 가장 정확한 방법은 프로파일 러에서이를 보는 것입니다. 거기에는 JDK와 함께 제공되는 무료 도구가 있습니다. 그러나, 내가 사용한 가장 좋은 도구는 Yourkit입니다. 그렇다고이 솔루션 만이 유일한 솔루션이라는 의미는 아닙니다.

+0

jmap 충분하고 무료입니다. :) – bestsss

18

java.util.ArrayList의 용량에 참조 크기 (4 bytes on 32bit, 8bytes on 64bit) + [Object header + one int and one references]을 곱한 값입니다.

용량이 크기보다 (always >=) 차이가 있지만, 그들을 동등하게는 데이터를 저장하는 곳 ArrayListObject[]을 가지고 말하기 trimToSize()

기술적를 호출합니다.

3

메모리 프로파일 러의 용도입니다. 그것은 당신의 플랫폼을 알려줄 것입니다. 빈 ArrayList의 최소 크기는 64 바이트입니다. 100K 개 이상의 요소가 없으면이를 알 필요가 없을 가능성이 큽니다.

0

ArrayList의 작동 방식은 단순히 특정 크기의 배열을 포함한다는 것입니다 (생성자에서 지정할 수 있습니다. 기본값은 10입니다). 요소 수가 내부 배열에 비해 너무 커질 때마다 내부 배열의 크기가 두 배가됩니다. 따라서 객체의 크기에 내부 배열의 크기를 곱해야합니다.

3

Netbeans과 같은 profiler을 사용해야 만 프로그램의 메모리 사용량이 표시되고 각 개체에 대한 세부 정보를 얻을 수 있습니다.

1

답은 측정 방법에 따라 다릅니다. ArrayList의 크기를 묻는다면 얕은 크기를 줄 것입니다. 즉, ArrayList는 참조 배열과 포함 된 요소의 수를 나타내는 정수로 구성됩니다. 크기를 알고 싶다면 4 * array.length입니다.

ArrayList 및 포함 된 모든 요소의 크기를 알고 싶다면이를 파악할 수있는 힙 분석기가 있습니다. 나는 당신의 킷이 그들 중 하나라고 믿습니다.

1

자바의 메모리 사용량은 JVM 구현에 따라 다릅니다. 내가 아는 인스턴스의 메모리 사용량을 확인하는 유일한 방법은 Java 5 instrumentation 에이전트를 사용하는 것입니다. 그렇게하려면 약간 tutorial이 있습니다.

관련 문제