首页 > 代码库 > 对象的创建
对象的创建
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方法后一个真正的对象才算创建完成。
对象的创建
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。