有专门做美发的网站吗网站seo优化综合服务公司哪家好
有专门做美发的网站吗,网站seo优化综合服务公司哪家好,wordpress注册邮件验证,域名访问网站下JVM—对象的创建流程与内存分配
创建流程
对象创建的流程图如下#xff1a; 对象的内存分配方式
内存分配的方式有两种#xff1a;
指针碰撞#xff08;Bump the Pointer#xff09;空闲列表#xff08;Free List#xff09;
分配方式说明收集器指针碰撞#xff08…JVM—对象的创建流程与内存分配
创建流程
对象创建的流程图如下 对象的内存分配方式
内存分配的方式有两种
指针碰撞Bump the Pointer空闲列表Free List
分配方式说明收集器指针碰撞Bump the Pointer内存地址是连续的新生代Serial和ParNew收集器空闲列表Free List内存地址不连续老年代CMS收集器和Mark-Sweep收集器 指针碰撞
指针碰撞示意图如下 内存分配安全问题:
虚拟机给A线程分配内存的过程中指针未修改此时B线程同时使用了该内存就会出现问题。
解决方式
CAS乐观锁:JVM虚拟机采用CAS失败重试的方式保证更新操作的原子性TLAB (Thread Local Allocation Buffer)本地线程分配缓存预分配。
分配主流程
首先从TLAB里面分配如果分配不到再使用CAS从堆里面划分。
对象如何进入老年代
对象进入老年代流程如下 新对象大多数默认都进入Eden 对象进入老年代的四种情况 年龄太大 MinorGC15次【-XX:MaxTenuringThreshold】 动态年龄判断:MinorGC后会动态判断年龄将符合要求对象移入老年代 MinorGC之后发现Survivor区中的一批对象的总大小大于了这块Survivor区的50%那么就会将此时大于等于这批对象年龄最大值的所有对象直接进入老年代。 例子: Survivor区中有一批对象年龄分别为年龄1年龄2年龄n的多个对象,对象总和大小超过了Survivor区域的50%此时就会把年龄n及以上的对象都放入老年代。希望那些可能是长期存活的对象尽早进入老年代。
比率可以由-XX:TargetsurvivorRatio指定大对象直接进入老年代1M【-XX:PretenureSizeThreshold 】前提是Serial和ParNew收集器 为了避免大对象分配内存时的复制操作降低效率。 避免了Eden和Survivor区的复制。 MinorGC后存活对象太多无法放入Survivor。
空间担保机制
空间担保机制:当新生代无法分配内存的时候我们想把新生代的老对象转移到老年代然后把新对象放入腾空的新生代。此种机制我们称之为内存担保。
空间担保流程图如下 对象内存布局
对象内存布局示意图如下 对象里的三个区
堆内存中一个对象在内存中存储的布局可以分为三块区域:
堆内存中一个对象在内存中存储的布局可以分为三块区域: 对象头(Header) : Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord: 用于存储对象自身的运行时数据它是synchronized实现轻量级锁和偏向锁的关键。 默认存储:对象HashCode、GC分代年龄、锁状态等等信息。 为了节省空间也会随着锁标志位的变化存储数据发生变化。 类型指针KlassPoint: 是对象指向它的类元数据的指针虚拟机通过这个指针来确定这个对象是哪个类的实例开启指针压缩存储空间4byte不开启8byte。JDK1.6默认开启 数组长度:如果对象是数组则记录数组长度占4个byte如果对象不是数组则不存在。 对齐填充:保证数组的大小永远是8byte的整数倍。 实例数据(Instance Data):生成对象的时候对象的非静态成员变量也会存入堆空间 对齐填充(Padding) :JVM内对象都采用8byte对齐不够8byte的会自动补齐。
如何访问一个对象
有两种方式: 句柄:稳定对象被移动只要修改句柄中的地址 直接指针:访问速度快节省了一次指针定位的开销
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87599.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!