java对象是怎么创建出来的

java对象的创建过程:
类加载:对象要被创建,它对应的类就必须先被虚拟机加载(关于加载的过程,有兴趣的童鞋可以看我的博文" JVM类加载过程详解" )
对象内存分配:
类被加载后就可以开始为对象分配内存了,也就是在堆中划分一块区域给该对象,分配的方式有指针碰撞和空闲列表,指针碰撞的方式就是采用连续的空间进行对象内存分配,左边都是已分配内存,右边都是空闲内存,中间是一个指针用于分隔;空闲列表就不是连续的内存了,需要维护一个映射表存储了哪些区域已用哪些区域空闲。采用何种方式取决于使用的垃圾收集器,目前CMS收集器采用的时空闲列表,其他如Serial Parallel等收集器都是采用的指针碰撞。
由于堆是由线程共享的,所以分配堆内存这个过程并不线程安全,对此有两种方式,一种是采用同步的方式进行分配(CAS加失败重试),一种是为每个线程分配一块区域,只有在不够用时才需要同步的分配更大的内存
设置对象运行时的一些必要信息:
在完成内存分配后,需要对对象进行一些必要的设置,比如对象属于哪个类的实例,对象的GC分代年龄,对象的hash码,锁相关的信息,这些信息存储在对象的对象头之中
执行init方法(实例构造器):
将对象按照程序员的希望进行初始化,这样一个完整可用的对象才算被创建出来, 编译期间虚拟机会收集类中对成员变量的赋值语句以及代码块中的语句合并为init方法(包括声明成员变量时指定的初始值,构造方法中、代码块中的赋值行为),init方法中会显式的去调用父类的构造器
至此,一个对象就完成了它的创建过程,可以被正常使用了
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值