• 对象的创建


     1  对类加载进行检查,之后分配内存大小(大小是在类加载的时候就确认的了)具体的分配内存的方式有两种(原因是由于不同的垃圾回收策略造成的)

         1)由于使用Serial,ParNew ,带有Compact过程的收集器时对内存的处理是规整的,所以对内存分配可以使用”指针碰撞“的方式

          2)使用cms这种基于mark-sweep  这种算法的收集器的时候对内存的处理是不规整的,所以内存的分配的方式是空闲列表

    2 创建对象的时候要保证数据的原子性,频繁的创建对象操作在修改指针的位置的时候也并不是线程安全的。解决这种问题有两种常见的方式:

       1) 对分配内存空间的操作进行同步的处理,

      2) 把内存分配动作按照线程划分在不同的空间之中进行,为每个线程在java堆中预先分配一小块内存,成为本地线程分配缓存(Thread Local Allocation Buffer TLAB) 哪个线程要分配内存就在哪个线程的TLAB上分配,只有TLAB分配完了之后才需要同步的锁定,虚拟机是否使用TLAB  可以通过-XX:+/UseTLAB参数来设定

    3 虚拟机要对对象进行设置,比如这个对象属于哪个实例,如果才能找到类的元数据信息,对象的哈希吗,对象的gc分代年龄,

    4 上面操作只是在虚拟机的层面上一个对象创建成功了,但从java程序的视角来看,对象创建才刚刚开始,执行init方法后一个真正的对象才算创建完成。

  • 相关阅读:
    Win7系统安装Centos7.0双系统(二)
    vue动态加载图片失效
    vuex store更新了数据,但未触发getters
    js获取图片信息
    http请求204
    IOS 伪类:active失效
    js下载blob的形式
    URL的 ? 和 # (hash),如何将参数保存在URL中,用于刷新获取之前的变量?
    vue中修改数组,dom未更新的问题
    vue中使用qrcode,遇到两次渲染的问题
  • 原文地址:https://www.cnblogs.com/jie123/p/6792358.html
Copyright © 2020-2023  润新知