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

精美手机网站模板网址大全100个

精美手机网站模板,网址大全100个,鹿泉区住房建设局网站,金融网站模板源代码文章目录 01. 对象创建1.1 创建过程概览1.2 类加载检查1.3 为对象分配内存1.4 将内存空间初始化为零值1.5 设置对象的必要信息1.6 总结 02. 对象的内存布局2.1 对象头区域2.2 实例数据区域2.3 对齐填充区域2.4 总结 03. 对象的访问定位其他介绍01.关于我的博客 注#xff1a;读… 文章目录 01. 对象创建1.1 创建过程概览1.2 类加载检查1.3 为对象分配内存1.4 将内存空间初始化为零值1.5 设置对象的必要信息1.6 总结 02. 对象的内存布局2.1 对象头区域2.2 实例数据区域2.3 对齐填充区域2.4 总结 03. 对象的访问定位其他介绍01.关于我的博客 注读者在阅读博客的过程中总结各个文章的知识写了很多笔记。但是本文原作者的写作和总结已经很翔实了因此本文绝大多数照搬原作者的写作中间稍加自己的理解和修改。原文来源如下 作者Carson带你学Android 链接https://juejin.cn/post/6844903681553334285 01. 对象创建 在开发使用时创建 Java 对象仅仅只是是通过关键字newA a new A()可是它真的这么简单吗我想不是的他是一个很复杂的过程。 1.1 创建过程概览 对象创建的流程概览如下 new指令启动流程。类加载检查为对象分配内存将内存空间初始化为零值对对象进行必要的设置 下面我将对每个步骤进行讲解。 1.2 类加载检查 我们调用new的时候知道new指令右侧是有一个参数的 它是一个符号引用我们要检查是否能在 常量池中 定位到该符号引用未定位到则说明类尚未加载我们要进行类的加载机制。这个我们可以后续介绍。 如果没有需要先执行相应的类加载过程 1.3 为对象分配内存 现在我们类加载检查通过了确定类已经被加载进来了。 虚拟机将会在堆中为对象分配内存即把一块确定大小的内存从 Java 堆中划分出来对象所需内存的大小在类加载完成后便可完全确定。 内存分配 根据 Java堆内存是否绝对规整 分为两种方式指针碰撞 空闲列表 怎么理解这里的规整和不规整 Java堆内存 规整已使用的内存在一边未使用内存在另一边Java堆内存 不规整已使用的内存和未使用内存相互交错 指针碰撞已使用内存在一边未使用内存在另一边中间有一个指针作为分界指示器那么分配对象内存 把指针向 未使用内存 移动一段 与对象大小相等的距离 空闲列表虚拟机维护着一个 记录可用内存块 的列表在分配时从列表中找到一块足够大的空间划分给对象实例并更新列表上的记录 那么Java堆为什么有时候规整有时候不规整 Java堆是否规整 由所采用的垃圾收集器是否带有压缩整理功能决定。因此 使用带复制和标记-整理算法的垃圾收集器时如Serial、ParNew垃圾收集器采用指针碰撞使用 标记-清除算法的垃圾收集器时如 CMS垃圾收集器采用空闲列表。 可是对象在堆中分配是非常频繁的操作而堆又是进程共享的会存在并发情况下线程安全的问题。如正在给对象A分配内存指针还没有来得及修改对象B又同时使用了原来的指针来分配内存。我们怎么解决这个问题呢 加锁ok这可以这是最基础的解决方式。但是效率较低有没有其它更好的方式呢有的孩子我们可以采用更细的颗粒度的。我们可以为每个线程在 Java堆中预先分配一小块内存本地线程分配缓冲Thread Local Allocation Buffer TLAB哪个线程要分配内存就在哪个线程的TLAB上分配只有TLAB用完并分配新的TLAB时才需要同步锁。 1.4 将内存空间初始化为零值 内存分配完成后虚拟机需要将分配到的内存空间初始化为零不包括对象头这保证了对象的实例字段在使用时可不赋初始值就直接使用对应值 0 1.5 设置对象的必要信息 如设置 这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头中。 至此从 Java 虚拟机的角度来看一个新的 Java对象创建完毕。但从 Java 程序开发来说对象创建才刚开始需要进行一些初始化操作。 1.6 总结 下面用一张图总结 Java对象创建的过程 02. 对象的内存布局 那么在 Java 对象创建后到底是如何被存储在Java内存里的呢 对象在 Java内存中的 存储布局 可分为三块 对象头 存储区域实例数据 存储区域对齐填充 存储区域 下面我会详细说明每一块区域。 2.1 对象头区域 此处存储的信息包括两部分 对象自身的运行时数据Mark Word 如哈希码HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等该部分数据被设计成1个 非固定的数据结构 以便在极小的空间存储尽量多的信息会根据对象状态复用存储空间 对象的类型指针 即对象指向它的类元数据的指针虚拟机通过这个指针来确定这个对象是哪个类的实例 如果对象是数组那么在对象头中还必须有一块用于记录数组长度的数据 因为虚拟机可以通过普通Java对象的元数据信息确定对象的大小但是从数组的元数据中却无法确定数组的大小。 2.2 实例数据区域 存储对象的实例变量这是对象真正有效的数据 2.3 对齐填充区域 存储的信息占位符起到占位作用当对象的大小不是8字节的整数倍就需要通过对齐填充来补全。 为什么要补全呢这不是白白浪费空间吗 这涉及到底层的原理 在程序员看来内存是由一个个的字节组成。而CPU并不是这么看待的CPU把内存当成是一块一块的这里cpu的块是8字节大小。 假如有一个8字节大小的数据它分为两种情况 1、数据从0字节开始 2、数据从1字节开始 当该数据是从0字节开始时很CPU只需读取内存一次即可把这8字节的数据完全读取到寄存器中。当该数据是从1字节开始时问题变的有些复杂此时该数据不是位于内存读取边界上这就是一类内存未对齐的数据。此时CPU先访问一次内存读取0—7的数据进寄存器并再次读取8—15的数据进寄存器接着把0和9后续的的数据剔除最后合并1- 9这8字节的数据进寄存器。对一个内存未对齐的数据进行了这么多额外的操作大大降低了CPU性能。因此我们采用补全损失一些空间换取更高的执行效率 2.4 总结 ** 03. 对象的访问定位 问建立对象后该如何访问对象呢 实际上需访问的是 对象类型数据 对象实例数据 答Java程序 通过 栈上的引用类型数据reference 来访问Java堆上的对象 由于引用类型数据reference在 Java虚拟机中只规定了一个指向对象的引用但没定义该引用应该通过何种方式去定位、访问堆中的对象的具体位置 所以对象访问方式取决于虚拟机实现。目前主流的对象访问方式有两种 句柄 访问直接指针 访问 具体请看如下介绍很有意思。 其他介绍 01.关于我的博客 csdnhttp://my.csdn.net/qq_35829566 掘金https://juejin.im/user/499639464759898 githubhttps://github.com/jjjjjjava 简书http://www.jianshu.com/u/92a2412be53e 邮箱[934137388qq.com]
http://www.hkea.cn/news/14306343/

相关文章:

  • 武威网站制作公司服务电话建设网站方式有哪些
  • 搭建网站建设在手机上建网站
  • 广州建设技术职业学院是公办吗山东企业站点seo
  • 网站备案照片 多少钱郑州优化网站推广
  • 旅游景区网站建设方案文档四川网站建设 招标
  • 做网站和优化公司的宣传语3e网站建设
  • 企业网站开发视频短视频seo排名系统
  • 个旧网站建设公司网站备案承诺书怎么写
  • 电商网站建设与运营方向就业前景app营销
  • 扬州建设信息网站专业网站设计师去哪找
  • 博兴县建设局网站太原企业网站搭建
  • 商场网站方案合肥重点工程建设局
  • 英国T4学生签证 可以做网站吗江苏网站建设多少钱
  • 惠州手机模板建站南京seo排名收费
  • 手机网站用什么制作穆棱seo
  • 网站后台管理系统界面动易网站管理
  • 网站目标规划营销型网站建设运营
  • 永久免费自助建站wordpress的主题上传了没有显示
  • 石家庄手机网站建设公司wordpress图文调用
  • 做一个自己的网站要多少钱个人免费网站空间
  • 网站建设有什么方法连接数据库设计云网站建设
  • 苏州网站互联网软件有哪些
  • 郴州市建设局网站节能科杭州电子商务网站建设
  • 漳州微网站建设价格微信商城小程序怎么开通
  • 有专门为个人网站做推广的吗工信部网站icp备案号
  • 请人做网站交易平台wordpress需要先安装数据库吗
  • 020网站建设合同范本1000倍爆率传奇
  • 怎样做好物流网站建设wordpress给图片加边框
  • 个人网站建设怎么赚钱wordpress图片目录
  • 有那个网站做简历模板颜色搭配对网站重要性