이 기사는 Java 개체가 얼마나 많은 공간을 차지하는지 계산하는 방법을 소개합니다. 참조를 위해 귀하와 공유됩니다. 특정 내용은 다음과 같습니다
1. 객체 헤드
물체의 머리에는 적어도 두 단어가 있습니다. 배열 인 경우 세 단어는 다음과 같습니다.
II. 규칙
먼저, 모든 객체는 8 바이트이며, 속성은 [long, double], [int, float], [char, short], [byte, boolean] 및 참조 순서로 저장됩니다. 예를 들어:
공개 수업 테스트 {byte a; int b; 부울 C; 긴 d; 객체 E;}이 물체의 특성이 순서대로 저장되는 경우, 차지할 공간은 다음과 같습니다. Head (8) + A (1) + Padding (3) + B (4) + C (1) + Padding (7) + D (8) + E (4) = 40. 그러나이 규칙에 따라, 우리는 다음을 얻습니다. 헤드 (8) + D (4) + A (1) + C (1) + C (1) + C (1) + C (1) + C (1) + C (1) + C (1) + C (1) + C (1) 패딩 (4) = 32. 많은 공간을 절약한다는 것을 알 수 있습니다.
상속 관계와 관련하여 기본 규칙이 있습니다. 첫째, 부모 클래스의 구성원이 저장된 다음 서브 클래스의 구성원에게 저장됩니다. 예를 들어:
클래스 A {Long A; int b; int c;} 클래스 B는 a {long d;}을 확장합니다.이러한 방식으로 차지하는 순서와 공간은 다음과 같습니다. Head (8) + A (8) + B (4) + C (4) + D (8) = 32. 부모 클래스의 속성이 8 바이트가 충분하지 않으면 어떻게됩니까? 이것은 새로운 규칙을 제공합니다. 부모 클래스의 마지막 멤버와 아동 클래스의 첫 번째 멤버 사이의 간격이 4 바이트에 충분하지 않은 경우 4 바이트의 기본 단위로 확장해야합니다.
클래스 A {byte a;} 클래스 B는 a {byte b;}을 확장합니다.이 시점에서 점유 된 공간은 다음과 같습니다. 헤드 (8) + A (1) + 패딩 (3) + B (1) + 패딩 (3) = 16. 분명히이 방법은 다소 낭비되므로 다음과 같은 것이 있습니다. 서브 클래스의 첫 번째 멤버가 두 배나 길고 부모 클래스가 8 바이트를 사용하지 않고 소규모 데이터를 공간으로 채 웁니다.
클래스 A {byte a;} 클래스 B는 a {long b; 짧은 C; 바이트 d;}이 시점에서 점유 된 공간은 다음과 같습니다 : Head (8) + A (1) + 패딩 (3) + C (2) + D (1) + 패딩 (1) + B (8) = 24.
위의 것은 Java 물체가 얼마나 많은 공간을 차지하는지 계산하는 방법입니다. 모든 사람이 Java 프로그래밍을 배우는 것이 도움이되기를 바랍니다.