当前位置:网站首页>In depth study of JVM bottom layer (II): hotspot virtual machine object
In depth study of JVM bottom layer (II): hotspot virtual machine object
2022-07-02 06:48:00 【I think starfish_ ninety-eight】
List of articles
HotSpot Virtual machine objects
Object creation

Main process :

Determine whether the class corresponding to the object is loaded 、 link 、 initialization : The virtual machine received a new When the command , First, I will check whether the specified parameter can be in Constant pool To locate a symbolic reference to a class , And check the class represented by this symbol reference Whether it has been loaded by the class loader 、 Linked and initialized . If not, execute the corresponding class loading process first .

Allocate memory for objects : Choose which allocation method is by Java Pile up Whether it is regular or not Of , and Java Whether the heap is regular or not depends on whether the garbage collector is equipped with compression and sorting function
- Pointer collision : If Java The memory of the heap is regular , That is, all the used memory is put aside , And the free ones are on the other side . When allocating memory, move the pointer indicator in the middle to the free memory by a distance equal to the size of the object , This completes the allocation of memory .
- Free list : If Java Heap memory is not regular , The virtual machine needs to maintain a list to record what memory is available , In this way, when allocating, you can query the list to allocate enough memory to the object , And update the list record after allocation .

Dealing with concurrency security issues
Synchronize actions to allocate memory space ( use CAS + Failed retries to guarantee atomicity of update operation );
The action of memory allocation is divided into different spaces according to threads , That is, each thread Java A small chunk of memory is pre-allocated in the heap , Called local thread allocation buffer (Thread Local Allocation Buffer, TLAB). Which thread will allocate memory , On which thread TLAB The distribution of . Only TLAB Use up and assign new TLAB when , Need synchronization lock . adopt -XX:+/-UserTLAB Parameter to set whether the virtual machine uses TLAB.

Initialize the allocated memory space : After memory allocation , The virtual machine should initialize the allocated memory space to zero ( Object headers are not included ). If used TLAB, This step will arrive ahead of time TLAB On assignment . This step ensures that the instance fields of the object are in Java Code can be used directly without initial value .
Set the object header of the object : Set object header (Object Header) Information , Include the class of the object 、 Object's HashCode And objects GC Data such as generation age is stored in the object header of the object .
perform init Method to initialize : perform init Method , Initialize the member variables of the object 、 Call the constructor of the class , So an object is created
Memory layout of objects
HotSpot In the virtual machine , The layout of objects stored in memory can be divided into three areas : Object head (Header)、 The instance data (Instance Data) and Alignment filling (Padding).

Object head
stay HotSpot In the virtual machine , The object header consists of two parts of information : Runtime data and Type a pointer , If it's an array object , There is also a space to hold the length of the array .
- Mark Word( Runtime data ): Used to store the data of the object's own runtime , Such as hash code (hashCode)、GC Sub band age 、 A lock held by a thread 、 To the thread ID Etc . stay 32 Bit system occupies 4 byte , stay 64 In the bit system 8 byte ;
- Class Pointer( Type a pointer ): Used to point to the corresponding object Class object ( Its corresponding metadata object ) Memory address of . stay 32 Bit system occupies 4 byte , stay 64 In the bit system 8 byte ;
- Length: If it's an array object , There is also a space to hold the length of the array , Occupy 4 Bytes
The instance data
The instance data It's the object that actually stores Effective information , Whether from Parent inheritance It's still this kind of thing Self , It needs to be recorded , And this part of Storage order By the virtual machine Allocation policy and The order of definition Influence .
The allocation policy is always in the order of byte size from large to small , Put the same byte size together .
Alignment filling
No special meaning , It's not necessary , Placeholder only .
HotSpot The virtual machine requires that each object be Initial address Must be 8 Integer multiples of bytes , It has to be the size of the object 8 Bytes of An integral multiple . and Object header Is precisely 8 Multiple of bytes (32 Position as 1 times ,64 Position as 2 times ), therefore , When the object instance data part is not aligned , It needs to pass Alignment filling To make up for .
Object access location
Java The program needs to go through JVM References on the stack access specific objects in the heap . How objects are accessed depends on JVM The realization of virtual machine . At present, the mainstream access methods are Handle and Direct Pointers Two ways
Handle access
Java The heap is divided into a block of memory as Handle to the pool , Of the object stored in the reference Handle address , And the handle contains Object instance data And Object type data Respective Specific address Information , The specific structure is shown in the figure below :

advantage : What is stored in the reference is Stable Handle address of , When the object is moved ( Moving objects during garbage collection is a very common behavior ) It just changes In handle Of Instance data pointer , and quote There is no need to modify itself .
Direct Pointers
If you use Direct Pointers visit , quote The direct storage in is Object address , that Java The layout inside the heap object must consider how to place access Type data Information about .

advantage : Speed faster , Saved Once the pointer is positioned Time cost of . Because the access of the object Java Very often , As a result, this kind of overhead can add up to a considerable execution cost .HotSpot That's how it works .
边栏推荐
- Sublime Text 配置php编译环境
- Dynamic global memory allocation and operation in CUDA
- js删除字符串的最后一个字符
- table 组件指定列合并行方法
- Warp shuffle in CUDA
- 20210306转载如何使TextEdit有背景图片
- Vector types and variables built in CUDA
- Fe - use of weex development weex UI components and configuration use
- There are multiple good constructors and room will problem
- 记录一次RDS故障排除--RDS容量徒增
猜你喜欢

Blog directory of zzq -- updated on 20210601

Solution to the black screen of win computer screenshot

Apt command reports certificate error certificate verification failed: the certificate is not trusted

Alibaba cloud MFA binding Chrome browser

No process runs when querying GPU, but the video memory is occupied

由于不正常断电导致的unexpected inconsistency;RUN fsck MANUALLY问题已解决

Latex warning: citation "*****" on page y undefined on input line*

微信小程序基础

Warp shuffle in CUDA

AWD学习
随机推荐
(第一百篇BLOG)写于博士二年级结束-20200818
virtualenv和pipenv安装
Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
VSCODE 安装LATEX环境,参数配置,常见问题解决
JS modification element attribute flipping commonly used in selenium's Web Automation
Improve user experience defensive programming
After reading useful blogs
MySQL index
Flask-Migrate 检测不到db.string() 等长度变化
Nodejs - Express middleware modification header: typeerror [err_invalid_char]: invalid character in header content
Unexpected inconsistency caused by abnormal power failure; Run fsck manually problem resolved
qq邮箱接收不到jenkins构建后使用email extension 发送的邮件(timestamp 或 auth.......)
20201025 visual studio2019 qt5.14 use of signal and slot functions
pytest(1) 用例收集规则
Build learning tensorflow
QQ email cannot receive the email sent by Jenkins using email extension after construction (timestamp or auth...)
Log - 7 - record a major error in missing documents (A4 paper)
Function execution space specifier in CUDA
DeprecationWarning: .ix is deprecated. Please use.loc for label based indexing or.iloc for positi
Présence d'une panne de courant anormale; Problème de gestion de la fsck d'exécution résolu