2016-06-24 4 views

답변

3

javac의 는 객체의 크기를 알 수 없습니다. JVM은 이러한 세부 사항을 추상화합니다.

C 또는 C++와 같은 원시 컴파일 언어에서 컴파일러는 객체를 더 큰 구조체 안에 포함하거나 스택에 할당 할 때 객체의 크기를 알아야합니다. * 힙 할당의 경우 동적 인 크기의 객체를 가지고 있지만, 이것은 매우 위험하고 옳지 않습니다. C에서 이것은 전통적으로 구조체를 빈 배열로 끝내고 여분의 공간을 할당함으로써 이루어진다.

실제로 녹은 알려진 크기와 알 수없는 크기를 가진 형식을 구별합니다. 나중에는 제한된 상황에서만 사용할 수 있습니다. C/C++에는 기본적으로 불투명 포인터로만 사용할 수있는 불완전한 유형의 유사한 개념이 있습니다.

* 기술적으로 C는 스택에 가변 크기의 배열을 허용합니다.

+0

감사합니다. 따라서 JVM은 실제로 (런타임에) 필요할 때 바로 객체의 크기를 결정하고 그 객체가 힙 또는 비 힙 영역에 있는지 여부는 중요하지 않습니다. 그리고 C++ 컴파일러의 경우 런타임에 스택을 할당 할 수있는 기회가 있습니까 (이론적으로는 스택 할당에 해당). – zgulser

+0

@zgulser JVM은 원하는대로 할 수 있습니다. 실제로는 객체의 크기가 클래스 정의 (런타임에 한 번로드 됨)로 고정되고 최적화되지 않는 한 모든 객체가 힙 할당됩니다. 배열에는 특별한 처리가 있습니다. – Antimony

+0

알았어요. 어떻게 배열이 처리됩니까? – zgulser