当前位置:网站首页>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 .
边栏推荐
- Unexpected inconsistency caused by abnormal power failure; Run fsck manually problem resolved
- Win电脑截图黑屏解决办法
- Huawei mindspire open source internship machine test questions
- The use of regular expressions in JS
- Self cultivation of programmers - Reflection on job hunting
- Usage of map and foreach in JS
- PIP install
- Flask-Migrate 检测不到db.string() 等长度变化
- ctf-web之练习赛
- Solution to the black screen of win computer screenshot
猜你喜欢

Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决

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

Blog directory of zzq -- updated on 20210601

web自动中利用win32上传附件

uniapp引入本地字体

Linux MySQL 5.6.51 Community Generic 安装教程

Sublime Text 配置php编译环境

Distributed transactions: the final consistency scheme of reliable messages

Uploading attachments using Win32 in Web Automation

Usage of map and foreach in JS
随机推荐
Log - 7 - record a major error in missing documents (A4 paper)
Alibaba cloud MFA binding Chrome browser
Eggjs -typeorm 之 TreeEntity 实战
Redis - cluster data distribution algorithm & hash slot
[daily question 1] write a function to judge whether a string is the string after the rotation of another string.
The default Google browser cannot open the link (clicking the hyperlink does not respond)
Latest CUDA environment configuration (win10 + CUDA 11.6 + vs2019)
VSCODE 安装LATEX环境,参数配置,常见问题解决
Redis - hot key issues
FE - Weex 使用简单封装数据加载插件为全局加载方法
js把一个数组分割成每三个一组
Linux MySQL 5.6.51 community generic installation tutorial
DeprecationWarning: . ix is deprecated. Please use. loc for label based indexing or. iloc for positi
Promise中有resolve和无resolve的代码执行顺序
浏览器滚动加载更多实现
selenium备忘录:selenium\webdriver\remote\remote_connection.py:374: ResourceWarning: unclosed<xxxx>解决办法
Dynamic global memory allocation and operation in CUDA
2020-9-23 use of QT timer qtimer class.
kali最新更新指南
20201025 Visual Studio2019 QT5.14 信号和槽功能的使用