Java对象创建的过程
以Object obj = new Object();
1.检查常量池中是否存在该类的符号引用,如果没有,则先加载该类,并解析和初始化
2.为对象分配内存空间(内存大小在类加载的时候已经确定大小)
分配内存过程中需要考虑的问题:
内存是否规整
① 假设Java 堆中内存是连续规整的,也就是说Heap中一侧是已经使用过的内存空间,而另一侧是空闲空间,则此时使用指针指向起始空闲内存,当需要分配新的空间时,只需要将指针向后移动制定空间大小位置即可完成内存的分配,这种分配方式称为“指针碰撞”(Bump the Pointer)
② 假设内存并不是连续规整的,空闲和使用的相互交错,则此时JVM就需要记录哪些内存块石可用的,分配时,分配足够大的空间给对象实例,同事更新记录列表。这种方式称为“空闲链表”(Free List)
而是采用Bump the Pointer的方式还是Free List的方式由JVM Heap是否规整决定,而Heap的规整与否又由所采用的垃圾收集器是否带有亚索整理的功能决定。使用Serial、ParNew等带有Compact过程的收集器时则采用指针碰撞,而使用CMS这种给予Mark Sweep算法收集器时,采用Free List方式
对象的创建十分频繁,如何解决并发带来的不安全问题???
- 内存分配完成后设置对象头
实例是哪个类的实例、类的元数据信息、对象的哈希码、对象的GC分代信息
以上信息位于对象的头信息中(ObjectHeader),除此之外,对象的其他字段都还是0,至此一个新的对象已经产生,但是尚未进行初始化。
- 对象初始化,执行init方法。创建完成
对象在内存中存储的布局可以分为3块区域:对象头,实例数据,对齐填充。
对象的定位访问有:句柄和直接访问。
- Java:对象创建和初始化过程
- java 对象创建的过程
- java对象的创建过程
- java中的对象创建过程
- Java知识总结——对象创建过程
- 深入理解JVM : Java堆中对象创建、布局、访问全过程
- java 创建对象的过程
- java中的对象创建过程
- java对象的创建过程
- Java:对象创建和初始化过程
- 【Java 它 JVM】对象的创建过程
- Java对象的创建过程
- JAVA基础--类加载&对象创建过程
- JAVA中对象创建和初始化过程
- java程序中创建触发器、存储过程等对象
- java对象的创建过程
- java创建对象过程
- java中的对象创建过程
- Java对象创建和初始化过程,处理字符串的机制