当前位置: 首页 > news >正文

网站设计在线域名交易中心

网站设计在线,域名交易中心,wordpress 转域名,代理网络下载对象创建 Java语言层面#xff0c;创建对象通常#xff08;例外#xff1a;复制、反序列化#xff09;仅仅是一个new关键字即可#xff0c;而在虚拟机中#xff0c;对象#xff08;限于普通Java对象#xff0c;不包括数组和Class对象等#xff09;的创建又是怎样一个过…对象创建 Java语言层面创建对象通常例外复制、反序列化仅仅是一个new关键字即可而在虚拟机中对象限于普通Java对象不包括数组和Class对象等的创建又是怎样一个过程呢 ① Java虚拟机遇到一条字节码new指令时首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有那必须先执行相应的类加载过程。 ② 类加载检查通过后接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定为对象分配空间实际上便等同于把一块确定大小的内存块从Java堆中划分出来。此时有两种实现情况 假如Java堆中内存是绝对规整的被使用过的内存都被放在一边空闲的内存被放在另一边中间放着一个指针作为分界点的指示器那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离这种分配方式称为“指针碰撞”Bump ThePointer。假如Java堆中的内存并不是规整的已被使用的内存和空闲的内存相互交错在一起虚拟机就必须维护一个列表记录上哪些内存块是可用的在分配的时候从列表中找到一块足够大的空间划分给对象实例并更新列表上的记录这种分配方式称为“空闲列表”Free List。 选择哪种分配方式由Java堆是否规整决定而Java堆是否规整又由所采用的垃圾收集器是否带有空间压缩整理的能力决定。【因此选择哪种分配方式主要由垃圾收集器决定】 使用Serial、ParNew等带压缩整理过程的收集器时系统采用的分配算法是指针碰撞既简单又高效而当使用CMS基于清除Sweep算法的收集器时理论上就只能采用较为复杂的空闲列表来分配内存。 对象创建在虚拟机中是非常频繁的行为即使仅仅修改一个指针所指向的位置在并发情况下也并不是线程安全的解决这个问题有两种可选方案 对分配内存空间的动作进行同步处理——实际上虚拟机是采用CAS配上失败重试的方式保证更新操作的原子性把内存分配的动作按照线程划分在不同的空间之中进行即每个线程在Java堆中预先分配一小块内存称为本地线程分配缓冲Thread Local AllocationBufferTLAB哪个线程要分配内存就在哪个线程的本地缓冲区中分配只有本地缓冲区用完了分配新的缓存区时才需要同步锁定。虚拟机是否使用TLAB可以通过-XX/-UseTLAB参数来设定。 ③ 内存分配完成之后虚拟机必须将分配到的内存空间但不包括对象头都初始化为零值如果使用了TLAB的话这一项工作也可以提前至TLAB分配时顺便进行。这步操作保证了对象的实例字段在Java代码中可以不赋初始值就直接使用使程序能访问到这些字段的数据类型所对应的零值。 ④ Java虚拟机还要对对象进行必要的设置例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码实际上对象的哈希码会延后到真正调用Object::hashCode()方法时才计算、对象的GC分代年龄等信息。这些信息存放在对象的对象头Object Header 之中。根据虚拟机当前运行状态的不同如是否启用偏向锁等对象头会有不同的设置方式。 此时从虚拟机的视角来看一个新的对象已经产生了。从Java程序的视角看来new指令之后会接着执行()方法按照程序员的意愿对对象进行初始化这样一个真正可用的对象才算完全被构造出来。 对象内存布局 对象在堆内存中的存储布局可以划分为三个部分对象头Header、实例数据Instance Data和对齐填充Padding。 ① 对象的对象头部分包括两类信息。 第一类是用于存储对象自身的运行时数据如哈希码HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等这部分数据的长度在32位和64位的虚拟机未开启压缩指针中分别为32个比特和64个比特官方称它为“Mark Word”。对象需要存储的运行时数据很多实际上已经超出了32、64位Bit map结构所能记录的最大限度Mark Word被设计成一个有着动态定义的数据结构以便在极小的空间内存储尽量多的数据根据对象的状态复用自己的存储空间。另外一部分是类型指针即对象指向它的类型元数据的指针Java虚拟机通过这个指针来确定该对象是哪个类的实例。 ② 实例数据部分是对象真正存储的有效信息即在程序代码里面所定义的各种类型的字段内容无论是从父类继承下来的还是在子类中定义的字段都必须记录起来。这部分的存储顺序会受到虚拟机分配策略参数-XXFieldsAllocationStyle参数和字段在Java源码中定义顺序的影响。 如果HotSpot虚拟机的XXCompactFields参数值为true默认就为true那子类之中较窄的变量也允许插入父类变量的空隙之中以节省出一点点空间。 ③ 对齐填充这并不是必然存在的也没有特别的含义它仅仅起着占位符的作用。 HotSpot虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍即任何对象的大小都必须是8字节的整数倍。对象头部分已经被精心设计成正好是8字节的倍数1倍或者2倍如果对象实例数据部分没有对齐的话就需要通过对齐填充来补全。 对象的访问定位 创建对象是为了后续使用该对象Java程序会通过栈上的reference数据来操作堆上的具体对象。 对象访问方式也是由虚拟机实现而定的主流的访问方式主要有使用句柄和直接指针两种 句柄Java堆中将可能会划分出一块内存来作为句柄池reference中存储的就是对象的句柄地址而句柄中包含了对象实例数据与类型数据各自具体的地址信息。 使用句柄来访问的最大好处就是reference中存储的是稳定句柄地址在对象被移动垃圾收集时移动对象是非常普遍的行为时只会改变句柄中的实例数据指针而reference本身不需要被修改。 直接指针访问reference中存储的直接就是对象地址如果只是访问对象本身的话就不需要多一次间接访问的开销。
http://www.zqtcl.cn/news/659/

相关文章:

  • 本机做网站服务上传到泰州网站模板
  • 做网站一定要自己搭建服务器吗学做网网站论坛
  • 东莞p2p网站开发价钱wordpress安装多个
  • 网站建设项目验收付款注册个人公司流程和费用最新
  • 南通优化网站排名新媒体运营培训学校
  • 齐齐哈尔市建设局网站做ui的网站有哪些内容
  • 深圳建网站哪个好贵阳app制作开发
  • 帮建网站wordpress太臃肿
  • 房产网站推广龙华网站建设推广外包
  • 招聘网站可以同时做两份简历吗6蜀icp备 网站建设中企动力成都
  • 做图软件ps下载网站肇庆网站推广排名
  • 查询域名是否做过网站南宁网站建设q.479185700強
  • 菏泽网站建设便宜臻动传媒桂林生活网招聘信息网
  • 做网站的公司不给域名安徽合肥建设网
  • 做木箱的网站推广计划名称写什么
  • 网站建站定做天津和平做网站贵吗
  • 做h5商城网站自己本地可以做网站服务器
  • 塘厦建设网站营销策划的内容包括哪些
  • 程序员知识网站需要多少钱网页设计教程答案
  • 百度提交入口网站怎么看珍佰农 商城网站建设
  • 东莞网站排名wordpress输出友情链接
  • wordpress+帖子置顶百度seo营销推广多少钱
  • 贵州建设厅网站八大员报名入口wordpress微信支付插件
  • 本地做织梦网站运营管理系统
  • 周杰伦做的广告网站合肥公司网站建设多少费用
  • 企业网站建设818gx制作游戏需要学什么
  • 沈阳网站怎么推广下载百度推广app
  • 深圳哪里有做网站的公司优惠券网站建设制作
  • 合肥瑶海区网站建设费用咸阳做网站公司
  • 网站推广方法包括哪些杭州制造业企业做网站