推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

虚拟机在java堆中对象分配、布局和访问的过程

   2023-08-07 网络整理佚名1730
核心提示:假如,java堆中的内存并不是规整的,已使用的内存和空间的内存相互交错,如此虚拟机就必须维护一个列表,记录上哪些内存块是可用的,对象创建的线程安全问题实际上虚拟机采用CAS配上失败重试的方式保证更新操作的原子性;从虚拟机的角度,一个新的对象已经产生。从java程序的角度,对象创建才刚刚开始,init方法还没有执行,所有的字段都为零。

虚拟机在java堆中对象分配、布局和访问的过程 1、对象创建 从java程序开始,new指令开始类加载 类加载通过后,进行内存分配

如果java堆中的内存是绝对规则的,将所有已用内存和空闲内存分成两部分,中间放置一个指针作为分界点的指示符,那么分配的内存

如果java堆中的内存不规则,已用内存和空间内存是交错的,所以虚拟机必须维护一个列表来记录哪些内存块可用,

分配方式的选择取决于:java堆是否规则; Java堆是否规则取决于:所使用的垃圾收集器是否具有压缩和排序的功能。

例子

对象创建的线程安全问题

事实上,虚拟机采用带有失败重试的CAS来保证更新操作的原子性;

内存分配的动作按照线程划分到不同的空间,即每个线程在java堆中预先分配一小块内存,称为本地线程分配缓冲区(Tlab)。

对象内存分配完成后,虚拟机初始化内存空间来修改对象。 从虚拟机的角度来看,一个新的对象已经生成了。 从java程序的角度来看,对象创建刚刚开始,init方法还没有执行,所有字段都为零。2. 对象的内存布局 对象在内存中的布局和分配分为三部分: 1. 对象头 2. 实例数据 3. 对齐和填充 3. 访问有2种访问方式

指针访问

句柄指针的优缺点 Sun 使用第二种方法

参考:java虚拟机第二版

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON