当一个类型经历了装载,连接,初始化之后,就可以为这个类变量实例化一个对象了。在java中,一个类可以被显式或者隐式的实例化。
显式实例化有四种方法:
1 使用new操作符
2 调用java.lang.reflect.Constructor的newInstance方法
3 调用现有对象的clone方法
4 通过java.io.ObjectInputStream的readObject方法反序列化
隐式实例化就是指在代码中看不见以上四种关键字,但仍会在堆空间中实例化对象,比如public static void main(String [] args)方法中的参数,当有参数传入的时候,就需要实例化String对象,这就是隐式实例化;再比如System.out.println("str"+"str1");语句会实例化出一个StringBuffer对象和一个String对象,StringBuffer对象用于连接两个常量,String用于存储StringBuffer.toString()的结果。这些都是隐式的创建类对象。
不管是显式的还是隐式的,当
实例化一个类对象的时候,JVM会在堆空间中为对象变量分配内存,包括他的父类中的对象变量。同时为这些对象变量赋默认值(这和类的连接阶段的准备过程很像)(如果变量在声明的时候有默认值那就赋代码中的默认值)。当为对象变量分配内存并赋默认值之后,就开始为变量赋正确的值了(这和类的初始化阶段很想)。对于使用clone方法产生的对象,直接从被克隆的对象中复制值。对于使用readObject产生的对象,直接从输入流中读取值。
对于使用new产生的对象,调用类的构造方法,类的构造方法在类的class文件中叫<init>方法。编译器在编译生成class文件的时候会保证每个类至少有一个<init>方法,这与类<clinit>方法略有不同。<clinit>方法是否存在主要取决于类中是否有类对象初始化语句和静态初始化语句。<init>方法负责为类的实例对象赋正确的值。关于<init>方法,使用过构造函数的都应该知道,在此不再赘述。
当一个类实例化产生对象之后,就可以使用这个对象了。当这个对象不再被使用的时候吗,就需要对象的垃圾回收机制了。关于垃圾回收,以后的博文中介绍。
分享到:
相关推荐
4. **容器化**:JVM-Sandbox作为一个框架容器,可以管理和控制代理对象的生命周期,包括创建、销毁等过程。这使得开发者可以更专注于业务逻辑,而不必关心代理对象的细节。 5. **应用场景**:JVM-Sandbox适用于多种...
在Java虚拟机(JVM)中,对象的生命周期包含了多个阶段,这些阶段共同决定了一个对象从诞生到消亡的过程。以下是这些阶段的详细介绍: **创建阶段(Creation)** 在这个阶段,对象从无到有,主要经历以下几个步骤:...
12. **代码优化**:减少不必要的对象创建,及时释放不再使用的对象引用,避免大量短生命周期对象进入老年代,都可以减少Full GC的压力。 13. **类加载机制**:理解类加载的双亲委派模型,避免类的不必要加载,可以...
- 堆内存:主要分为新生代(Eden、Survivor空间)和老年代,新生代对象生命周期短,老年代对象生命周期长。 - 分代收集:不同代有不同的垃圾回收策略,如Minor GC(新生代)、Major GC(老年代)和Full GC(整个堆...
4. **对象生命周期管理**:优化代码,避免创建过多短生命周期的对象,减少内存分配和GC的压力。同时,合理使用软引用、弱引用和虚引用,帮助JVM更好地管理内存。 5. **内存泄漏检测**:定期检查是否存在内存泄漏,...
"Java对象在JVM中的生命周期详解" Java对象在JVM中的生命周期是Java编程语言中一个非常重要的概念,它涉及到Java对象的创建、使用、释放和销毁整个过程。在JVM中,Java对象的生命周期可以分为七个阶段:创建阶段、...
- 通过调整年轻代和老年代的比例(`-XX:NewRatio`),可以优化对象的生命周期管理。 - 使用并行垃圾回收策略(`-XX:+UseParallelGC`)提高垃圾回收效率。 5. **性能监控与分析**: - 利用JMX监控工具来监控JVM的...
- **内存分配策略**:根据对象生命周期调整新生代和老年代的比例,避免Full GC频繁发生。 - **类加载机制优化**:合理控制类加载,避免类的过早加载和过多加载。 2. **虚拟机栈优化**: - **栈容量调整**:根据...
- 线程概念:理解线程的生命周期,创建线程的方式(Thread类、Runnable接口、Callable和Future)。 - 同步机制:掌握synchronized关键字,了解锁的概念,包括可重入锁、死锁、活锁和饥饿状态。 - 线程池:熟悉...
新生代主要用于存储新创建的对象,老年代则存放生命周期较长的对象,而持久代主要存储类的元数据。 二、GC(垃圾收集) GC是JVM自动进行内存管理的过程,其目标是回收不再使用的对象,以释放内存空间。GC分为Minor...
4. **代码优化**:避免创建大量短生命周期的对象,减少内存碎片,使用String池,避免过度使用反射和动态代理。 四、JVM异常与诊断工具 1. **OutOfMemoryError**:常见的内存溢出错误,可能出现在堆、栈、方法区或...
分代收集是现代JVM的主流策略,将堆分为新生代和老年代,根据对象生命周期的不同进行不同策略的垃圾回收。 4. **内存溢出与内存泄漏**:内存溢出是JVM无法分配新的内存,内存泄漏则指程序未释放不再使用的内存。...
- **新生代与老年代**:根据对象生命周期划分内存区域,新创建的对象通常在新生代,生存时间较长的则进入老年代。 3. **内存溢出问题** - **堆内存溢出**:过多的对象实例导致堆空间不足。 - **栈内存溢出**:...
JVM的内存分为新生代(Young Generation)和老年代(Old Generation)两大部分,用于存放不同生命周期的对象。年轻代主要负责快速回收短期存在的对象,而老年代则存储生命周期较长的对象。新生代又进一步细分为Eden...
年轻代用于存储生命周期较短的对象,而老年代则存放生命周期较长的对象。当年轻代的空间不足时,会触发Minor GC,清理年轻代;当老年代空间不足时,就会触发Major GC或Full GC,这通常涉及整个堆的清理,包括年轻代...
4. **分代收集(Generational GC)**:根据对象生命周期将内存分为新生代和老年代,采用不同策略进行收集。 5. **并发标记扫描(Concurrent Mark Sweep, CMS)**:在应用运行时进行大部分GC工作,减少停顿时间。 6. **G1...
- 分代收集:根据对象生命周期将堆分为新生代、老年代,使用不同的GC策略。 - 常见的GC算法有:标记-清除、复制、标记-整理、分代收集等。 5. **JVM性能优化** - 参数调整:如-Xms、-Xmx设置堆大小,-XX:...
新生代存放短生命周期的对象,老年代存放长生命周期的对象。新生代采用复制算法,老年代采用标记-整理或标记-清除算法。 4. **新生代分区**:Eden和Survivor区是为了减少全区域复制操作,当Eden区满时,存活对象会...