当前位置:网站首页>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 .
边栏推荐
- Dynamic global memory allocation and operation in CUDA
- Flask migrate cannot detect db String() equal length change
- (第一百篇BLOG)写于博士二年级结束-20200818
- uniapp引入本地字体
- Utilisation de la carte et de foreach dans JS
- Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决
- 如何调试微信内置浏览器应用(企业号、公众号、订阅号)
- Linux MySQL 5.6.51 Community Generic 安装教程
- Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
- js删除字符串的最后一位
猜你喜欢
Sentry construction and use
ctf-web之练习赛
Self study table Au
Apt command reports certificate error certificate verification failed: the certificate is not trusted
Name six schemes to realize delayed messages at one go
Distributed transactions: the final consistency scheme of reliable messages
Implement strstr() II
uniapp引入本地字体
查询GPU时无进程运行,但是显存却被占用了
Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
随机推荐
Fe - use of weex development weex UI components and configuration use
Record RDS troubleshooting once -- RDS capacity increases dramatically
Warp matrix functions in CUDA
Pytest (2) mark function
Win10桌面图标没有办法拖动(可以选中可以打开可以删除新建等操作但是不能拖动)
Latex 编译报错 I found no \bibstyle & \bibdata & \citation command
Vector types and variables built in CUDA
Latex 报错 LaTeX Error: The font size command \normalsize is not defined问题解决
CUDA and Direct3D consistency
Thread hierarchy in CUDA
ModuleNotFoundError: No module named ‘jieba.analyse‘; ‘jieba‘ is not a package
Sublime text configuring PHP compilation environment
Kotlin - 验证时间格式是否是 yyyy-MM-dd HH:mm:ss
Overload global and member new/delete
FE - Weex 使用简单封装数据加载插件为全局加载方法
qq邮箱接收不到jenkins构建后使用email extension 发送的邮件(timestamp 或 auth.......)
NodeJs - Express 中间件修改 Header: TypeError [ERR_INVALID_CHAR]: Invalid character in header content
The use of regular expressions in JS
ctf三计
FE - Eggjs 结合 Typeorm 出现连接不了数据库