Home Java javaTutorial How to calculate the number of bytes occupied by a Java object

How to calculate the number of bytes occupied by a Java object

Jan 05, 2017 pm 05:30 PM
java object

The example in this article describes how to calculate (or estimate) the amount of memory occupied by a Java object. Share it with everyone for your reference. The specific analysis is as follows:

Usually, the premise of the heap memory usage we talk about is based on the background of "general situations". Excluding the following two situations:

In some cases, the JVM does not put the Object into the heap at all. For example: In principle, a small thread-local object exists on the stack, not in the heap.
The size of the memory occupied by the Object depends on the current state of the Object. For example: whether the Object's synchronization lock is in effect, or whether the Object is being recycled.
Let’s first take a look at what a single Object looks like in the heap

In the heap, each object consists of four fields (A, B, C and D), let’s explain them one by one below:

A: Object header, occupying very few bytes, expressing information about the current state of the Object
B: The space occupied by the basic type field (the native field refers to int , boolean, short, etc.)
C: The space occupied by the reference type field (the reference type field refers to the reference of other objects, each reference occupies 4 bytes)
D: The space occupied by the filler (what will be explained later It’s filler)

Below we explain A, B, C and D one by one

A: Object header
In memory, the total space occupied by each object not only includes the declaration within the object The space required by the variable also includes some additional information, such as object header and filler. The function of the "object header" is to record the instance name, ID and instance status of an object (for example, whether the current instance is "reachable", or the status of the current lock, etc.).
In the current JVM version (Hotspot), the number of bytes occupied by the "object header" is as follows:

An ordinary object occupies 8 bytes
An array occupies 12 bytes, including ordinary objects 8 bytes + 4 bytes (array length)

B: Basic type

boolean and byte occupy 1 byte, char and short occupy 2 bytes, int and float occupy 4 bytes, long and double occupy 8 bytes

C: Reference type
Each reference type occupies 4 bytes

D: Filler
In Hotspot, the total space occupied by each object is based on 8 Calculated by multiples, when the total space occupied by the object (object header + declared variables) is less than a multiple of 8, it will be filled in automatically. However, these filled spaces can be called "fillers". Let’s look at a specific example:

An empty object (without any variables declared) occupies 8 bytes -- > The object header occupies 8 bytes
A class that only declares a boolean type variable occupies 16 bytes - -> Object header (8 bytes) + boolean (1 bytes) + filler (7 bytes)
Declares a class with 8 boolean type variables, occupying 16 bytes --> Object header (8 bytes) + boolean (1 bytes) * 8

Through the above examples, it will help us deepen our understanding of Java programming.

For more related articles on how to calculate the number of bytes occupied by a Java object, please pay attention to the PHP Chinese website!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

What is the difference between memory leaks in Java programs on ARM and x86 architecture CPUs? What is the difference between memory leaks in Java programs on ARM and x86 architecture CPUs? Apr 19, 2025 pm 11:18 PM

Analysis of memory leak phenomenon of Java programs on different architecture CPUs. This article will discuss a case where a Java program exhibits different memory behaviors on ARM and x86 architecture CPUs...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

How to convert names to numbers to implement sorting within groups? How to convert names to numbers to implement sorting within groups? Apr 19, 2025 pm 01:57 PM

How to convert names to numbers to implement sorting within groups? When sorting users in groups, it is often necessary to convert the user's name into numbers so that it can be different...

See all articles