一、对象创建
类型信息在装载、连接和初始化之后,就可以使用了,可以访问类型的静态字段和方法,可以创建类型实例。对象的创建分为现实创建和隐式创建两种。
显示创建分为:1、通过new创建;2、通过java.lang.Class的newInstance方法创建;3、通过clone方法创建;4、通过java.io.ObjectInputStream的readObject方法创建。
隐式创建分为:1、启动类的main方法的string数组参数;2、常量池的CONSTANT_String_info表项被解析的时候会创建一个String对象;3、每个加载的类都会创建一个java.lang.Class对象;4、字符串+操作的时候,创建StringBuffer/StringBuilder对象。
二、对象在内存中的存储
非严格意义来说,对象都存储在堆上,由垃圾收集器负责回收不在被引用的对象。但是随着jvm运行期编译技术的不断进步,栈上分配对象和标量替换技术使得非逃逸对象可以分配在栈上。当然绝大多数对象都是分配在堆上的,此处我们主要讨论对象在堆中的存储。
对象的内容有:1、实例数据;2、指向堆中类型信息的指针;3、对象锁相关的数据;4、多线程协调完成同一件事情的时候wait set相关的队列;5、垃圾收集相关的内容,如存活时间、finalize方法是否运行过。
对象在内存中存储主要有两种方式:1、堆划分为句柄池和对象池,创建对象后的得到的引用是指向句柄池的指针,句柄池指针则指向对象池里的对象;2、堆只分为对象池,引用直接指向对象池中的对象。具体前边这篇博客已经有描述。这里顺便解答那篇博客中遇到的问题,Integer对象中那个不是实例数据和类型指针的数据是什么。
当然这还是翻书得到的答案,而且也只是HotSpot VM中的那4个字节,被称作对象头,官方称为Mark Word:1、25bits是对象的hashCode;2、4bits是垃圾收集相关的分代年龄;3、2bits是对象锁相关的信息,实现轻量级锁和偏向锁要用到;4、1bit是闲置位,值为0。
分享到:
相关推荐
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
4. **减少内存泄漏**:避免创建过多的短生命周期对象,尤其是大数据量的集合,这可能会导致新生代频繁触发垃圾收集。 5. **代码优化**:良好的编程习惯可以降低GC压力,如及时释放不再使用的对象引用,避免使用静态...
### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...
新生代和老年代的概念用于区分对象的生命周期,不同的垃圾收集器如Serial、Parallel、CMS、G1等适用于不同场景。 5. **字节码执行**:JVM通过解释器将字节码转换为机器码执行,为了提高性能,JVM还实现了Just-In-...
《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...
2. 编程实践:减少对象创建,避免大量短生命周期的对象,使用StringBuilder代替String拼接,以及合理设计数据结构等。 3. 并发编程:合理利用线程池,避免过度并发导致资源浪费。 4. 内存溢出:了解各种内存溢出异常...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
了解这个过程有助于我们理解和控制类的生命周期。 四、垃圾收集与内存优化 JVM的垃圾收集机制负责自动回收不再使用的对象所占用的内存,主要有标记-清除、复制、标记-整理和分代收集等算法。理解垃圾收集的工作...
Java虚拟机栈同样是线程私有的,其生命周期与线程相同。它用来描述Java方法执行的内存模型,每个方法被执行时都会创建一个栈帧来存储局部变量表、操作数栈、动态链接、方法出口等信息。方法执行过程即为栈帧的入栈和...
栈帧的生命周期与方法同步,线程私有。 - **本地方法栈**:与虚拟机栈相似,但服务于本地(Native)方法。 - **堆**:所有线程共享,存储对象实例和数组。堆被分为新生代和老年代,新生代用于短期对象,老年代用于...
- 类的生命周期包括加载、验证、准备、初始化和卸载五个阶段。 - 双亲委派模型:类加载器在加载类时,会将任务委托给父类加载器,直到Bootstrap ClassLoader。 3. **内存区域**: - 程序计数器:记录当前线程...
### JVM学习笔记知识点详解 #### 一、JVM的基本结构 **JVM(Java Virtual Machine,Java虚拟机)**是一种可以执行Java字节码的虚拟机。它为Java提供了平台无关性,使得Java代码可以在任何安装了JVM的平台上运行。 ...
JVM还提供了垃圾回收机制,自动管理对象的生命周期,避免了手动内存管理可能引发的内存泄漏和悬挂指针等问题。 #### 线程管理 在分布式应用中,线程管理尤为重要。JVM支持多线程执行,能够高效地处理并发任务。每...
- **分代收集(Generational GC)**:根据对象的生命周期,将堆分为新生代和老年代,不同年代采用不同的垃圾回收策略。 3. **垃圾回收器**: - **Serial GC**:单线程的垃圾回收器,适合轻量级应用。 - **...
6. **类的生命周期**:从加载到卸载,一个类在JVM中的完整生命周期包括加载、验证、准备、解析、初始化、使用和卸载。 7. **异常处理**:JVM支持异常处理机制,通过try-catch-finally语句块来捕获和处理异常。 8. ...
### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...
* 优化代码:使用 null 显式赋值、虚引用等方式及时回收大对象,减少大对象的生命周期,检查数据结构使用是否合理等。 4. JVM 对象创建 JVM 对象创建过程包括: * 类加载:类加载完毕后,其对象所需内存大小是...
2. **类与对象**:深入解析类的定义、对象的创建及生命周期,包括封装、继承和多态等面向对象的三大特性,以及构造函数、访问修饰符的使用。 3. **包与接口**:介绍了Java中的包机制,用于组织和管理类,以及接口的...