<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
1、找到类对象
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> 当碰到new关键字的时候,虚拟机要去方法区的常量池中寻找,是否能找到这个类的符号引用,如果没有找到,那么必须先执行类的加载过程、解析和初始化。对于继承而言,同样需要同时找到其父类(从下到上的顺序去查找)
2、分配内存并初始化零值
类加载完成后就需要在Java堆中分配指定大小的内存,这个大小是在类加载完成后确定的。
假设Java堆中的内存是绝对规整的,使用中的内存放一边,没使用的放在另一边,中间放着一个指针区分,那么在对象分配内存的时候,指针向空闲的那边挪动一段与类实例对象大小相同的区域,这种叫做指针碰撞。但是并非所有的GC算法在内存回收后都会把内存区域整理一遍,这个时候内存是零散的,这个时候就需要虚拟机去维护一个可用内存列表了,在分配内存的时候找出一块足够大的空间来分配。
这里还需要注意的是,对象在分配内存的时候的原子性的问题:假设我一个对象正在分配内存,指针还没来得及确定距离,下一个对象就来分配,并使用指针原来的位置,这个时候就会出问题。
解决这个问题的方案有两种:1.对对象内存的分配使用同步的方式处理,就是一个对象正在分配内存的时候,内存指针不允许其他对象分配使用,2.另外一种方法就是利用缓存,在每一个线程设置本地线程分配缓冲TLAB,在分配对象内存的时候,先在TLAB中分配,如果TLAB中的内存不够了,那么就再同步锁定,重新分配。
内存分配完成后,类对象里面的属性都初始化为0,或者是Null。以保证对象实例字段在不赋值的情况下也能使用。
3、设置对象的对象头
对象头中会存放,这个对象是哪个类的实例,如何才能得到类的元数据信息、对象的哈希值,GC年龄带信息等等。
4、对象初始化
这个时候开始执行init方法,按照程序员的意愿把对象里面的属性进行合理的初始化,然后一个对象才完整的诞生。对于继承的对象,会从父类开始向下执行初始化,这个初始化,并不是对父类也创建对象,然后初始化哦。
相关推荐
在Java性能调优中,JVM(Java Virtual Machine)创建对象和内存分配是至关重要的环节。这直接影响到程序的运行速度、内存占用以及整体系统的稳定性。本篇文章将深入探讨Java中对象创建的过程、内存分配机制,以及...
在编写高性能的Java应用时,应遵循一些最佳实践,比如避免在循环中创建对象,及时使对象符合垃圾回收标准,限制继承层次,优先使用局部变量等。这些规则有助于减少内存开销,提高系统性能,减少垃圾收集的压力。 ...
- **Unsafe.allocateInstance**:在特定情况下,可以使用sun.misc.Unsafe类的allocateInstance()方法直接在堆上创建对象,但这通常是不推荐的,因为它绕过了常规的构造函数调用。 2. **对象的创建过程** 创建一个...
Java垃圾收集器负责管理堆内存,进行对象创建和销毁。 - **栈**:每个线程都有自己的程序计数器、虚拟机栈和本地方法栈。栈用于存储方法调用的状态,包括局部变量表、操作数栈和动态链接。 - **方法区**:存储类和...
一旦类被正确地加载和初始化后,就可以通过以下步骤来创建对象实例: 1. **分配内存**:JVM会在堆内存中为新创建的对象分配内存空间。分配内存时,会考虑对象所需的大小,包括实例变量的空间以及对齐填充等。如果...
在反序列化过程中,Java会自动调用对象的无参构造方法来创建对象。为了使一个类可以被反序列化,该类需要实现Serializable接口。示例代码如下: ```java ObjectInputStream ois = new ObjectInputStream(new ...
Jvm 对象内存分配是 Java 虚拟机(JVM)中一个非常重要的过程,它决定了对象的创建、分配和初始化的整个过程。下面将详细探讨 Jvm 对象内存分配的整个过程。 一、对象的创建 Jvm 对象的创建是通过 new 指令来实现...
总结来说,JVM创建对象的过程包括:类加载检查、内存分配(指针碰撞或空闲列表)、线程安全保证(CAS、TLAB)、内存初始化、对象头设置以及字节码指令执行。理解这些步骤对于优化JVM性能和排查内存问题至关重要。
1. JVM 对象创建过程:JVM 对象创建过程包括检查参数、类加载、内存分配和对象设置等步骤。 2. 内存分配方式:JVM 使用两种方式进行内存分配:指针碰撞和空闲列表。 3. 并发问题解决方案:JVM 使用 CAS 乐观锁和线程...
C++创建JVM的过程主要分为以下几步: 1. **加载JVM库**:C++程序需要链接到JVM库才能与之交互。这通常通过JNI的`FindLibrary`函数完成,该函数会查找系统中JVM的动态链接库(如libjvm.so在Linux上,jvm.dll在...
首先,我们需要了解JVM是如何装载类和创建对象的。当Java程序运行时,JVM会加载类的字节码文件(.class),经过验证、准备、解析等步骤后,将类信息存储在方法区。一旦类被加载,JVM就会根据类定义创建对象,分配...
- **堆**:所有对象实例都在堆中创建,是JVM中最大的一块内存区域,也是线程共享的。在Java中,堆内存被进一步细分为新生代(Young Generation)、老年代(Old Generation)和永久代(PermGen,Java 8后被元空间...
如果Eden区的空间不足以容纳新创建的对象,JVM会触发Minor GC,清理Eden区不再使用的对象。在这个过程中,幸存下来的对象将被移动到Survivor区(通常包括From Space和To Space)。 2. **大对象直接进入老年代** 大...
### 创建string对象过程的内存分配详解 #### 一、引言 在Java中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。`String` 对象的创建涉及复杂的内存分配机制,特别是在Java虚拟机 (JVM) 的环境中...
本文将深入探讨JVM TI的核心概念、主要功能以及如何使用它来监控Java执行过程。 一、JVM TI概述 JVM TI是Java虚拟机的一部分,它是JDK中的一个本地接口,提供了C/C++的头文件和库,使得开发人员可以通过编写本地...
在Java编程语言中,控制创建对象的个数是一项重要的任务,尤其在资源管理或实现单例模式时。这里,我们将深入探讨如何通过不同的方法限制Java中对象的创建。 首先,让我们了解基本的对象创建过程。在Java中,我们...
在对象创建阶段,Jvm 将对象创建在堆中,在对象使用阶段,Jvm 将对象提供给 Java 程序使用,在对象垃圾回收阶段,Jvm 将垃圾对象回收以释放内存。 Jvm 的垃圾回收机制可以通过多种方式来触发,例如 MinorGC、Major...
### JVM虚拟机复习宝典:深入理解Java内存区域与对象创建机制 #### 一、Java内存区域概述 ...通过以上步骤,JVM完成了对象的创建过程。深入了解这些细节有助于更好地理解和优化Java应用程序的性能。