博客
关于我
java面向对象上(十)面向对象上总结-----加载类,创建对象时内存究竟是怎样的?(类/对象与内存控制)
阅读量:225 次
发布时间:2019-02-28

本文共 813 字,大约阅读时间需要 2 分钟。

Java 类初始化顺序与内存布局优化指南

在第一次使用一个类及其对象时,Java引擎会遵循特定的初始化顺序,这不仅影响类的加载效率,还对内存布局产生深远影响。以下是关于类和对象初始化过程的详细分析。

1. 类第一次加载时的初始化流程

当一个类首次被使用时,Java引擎会执行以下步骤:

  • 加载类文件:将类字节码从文件或JAR资源加载到内存中。
  • 验证类文件:确保类文件格式正确,签名一致,并遵守Java规范。
  • 准备类数据:将类信息存储到内存,包括类名称、版本号等元数据。
  • 初始化类变量
    • 如果是子类,会追溯到其所有祖先类,执行静态变量的初始化。
    • 最后才处理本类的静态变量。
  • 执行静态初始化块
    • 会从父类开始,依次执行各个祖先类的静态初始化块。
    • 最后执行本类的静态初始化块。

2. 对象创建时的初始化流程

当创建一个类对象时,以下步骤会被执行:

  • 准备对象实例:分配内存空间,设置对象头指针。
  • 初始化实例变量
    • 如果是子类,会追溯到其所有祖先类,执行实例变量的初始化。
    • 最后才处理本类的实例变量。
  • 执行初始化块
    • 会从父类开始,依次执行各个祖先类的初始化块。
    • 最后执行本类的初始化块。

3. 注意事项

  • 静态初始化块的特殊性:所有静态初始化块都会从java.lang.Object开始,逐步向下执行,最后处理本类。
  • 对象创建的轻量化:Java引擎通过调用父类的构造器和初始化方法,避免了直接创建父类对象,从而实现了内存的高效利用。

4. 内存布局分析

在类和对象初始化过程中,内存布局主要包括以下几个方面:

  • 对象头:存储指向对象的引用信息,包括类加载时的哈希值、分代信息等。
  • 实例变量:包括类和对象的静态变量、实例变量等,分布在对象的数据部分。
  • 静态变量:存储在类的数据区域,包括类的常量、静态变量等。

通过以上分析,可以清晰地看到Java类和对象初始化过程中的内存布局特点。理解这些机制有助于优化类和对象的创建效率,减少内存泄漏风险。

转载地址:http://pwqs.baihongyu.com/

你可能感兴趣的文章
Objective-C 编码规范
查看>>
Objective-C——判断对象等同性
查看>>
Objective-C之成魔之路【7-类、对象和方法】
查看>>
Objective-C享元模式(Flyweight)
查看>>
Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
查看>>
Objective-C内存管理教程和原理剖析(三)
查看>>
Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
查看>>
Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
查看>>
Objective-C实现1000 位斐波那契数算法(附完整源码)
查看>>
Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
查看>>
Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
查看>>
Objective-C实现2D变换算法(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现9x9乘法表算法(附完整源码)
查看>>
Objective-C实现9×9二维数组数独算法(附完整源码)
查看>>
Objective-C实现A*(A-Star)算法(附完整源码)
查看>>
Objective-C实现A-Star算法(附完整源码)
查看>>
Objective-C实现abbreviation缩写算法(附完整源码)
查看>>
Objective-C实现ABC人工蜂群算法(附完整源码)
查看>>