• 对象的创建


     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方法后一个真正的对象才算创建完成。

  • 相关阅读:
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I作业11
    C语言I作业10
    C语言I作业09
    C语言I作业08
    C语言寒假大作战04
  • 原文地址:https://www.cnblogs.com/jie123/p/6792358.html
Copyright © 2020-2023  润新知