JVM
CLYH
巨帅宏
展开
-
JVM中对象的内存布局及访问定位
一、对象的内存布局在JVM中,对象主要是存储在堆内存的,其中分为三个部分:对象头、实例数据和对齐填充。对象头对象头包括两类信息。第一类:Mark Word。用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分的数据长度在32位和64位的虚拟机中分别是32byte和64byte。并且这一部分数据官方成为Mark Word。Mark word的存储内容会随着对象的状态变化而改变。已32位虚拟机为例,对象在无锁状态下,有25比.原创 2020-10-26 22:45:02 · 199 阅读 · 0 评论 -
JVM对象创建过程
对象的创建在JVM中一般包括几个步骤:1、符号引用检查。符号引用是存储在常量池中的,符号引用对应的是一个类,JVM首先会根据符号引用判断对应的类是否已经经过相应的类加载过程,如果为执行类加载,则需要进行类加载。2、内存分配。接下来JVM会在堆中划分出一块区域用来存储对象实例。需要注意的是所需分配的对象内存大小在类加载的过程就已经确定了。内存分配主要有两种方式,指针碰撞和空闲列表。选择哪种分配方式取决于Java堆是否规整。假设Java堆是规整的,即被对象占用的内存在一边,空闲内存在另一半,中间放一个指原创 2020-10-21 23:30:33 · 123 阅读 · 0 评论 -
volatile可见性原理
volatile是并发编程中重要的角色之一,通常会被比作轻量级的synchronized。volatile有三大特性:可见性、原子性和有序性。本文主要介绍volatile的可见性原理。被volatile修饰的变量通过编译器编译成汇编指令后,指令当中会出现一个Lock前缀。而这个lock一般的作用就是保证数据的一致性,执行这条指令时一般有两个动作:1、将缓存行的数据写回到内存当中2、使其他处理器中缓存了该内存地址的缓存行无效。我们知道处理器运作的时候一般都是操作缓存而不是直接操作内存,同时,多线程原创 2020-10-21 22:16:03 · 295 阅读 · 0 评论 -
The runtime data area model of JVM
了解运行时数据区模型是认识Java虚拟机的重要前提。虽然说JVM甚至说较为常用的HotSpot虚拟机本身就有自动分配和管理内存的功能,但是学习JVM是为了能够在出错的时候甚至在优化的时候能够由开发人员自己去处理,虚拟机提供的自动内存管理只能在合适或通常情况下是没问题的。运行时数据区又称为Java虚拟机运行时数据区,它的大体模型结构如下图所示运行时数据区其实就是一块内存区域,按照不同的类型和功能进行划分。主要有程序计数器,虚拟机栈,本地方法栈,方法区和堆。按照线程的使用情况可以分为线程私有和线原创 2020-10-14 23:52:04 · 314 阅读 · 0 评论