首页 > 系统相关 >对象的内存图

对象的内存图

时间:2023-02-24 09:23:16浏览次数:47  
标签:java 对象 创建对象 内存 方法 加载

  • 一个对象的内存图
  • 2个对象的内存图
  • 数组的内存图

java是一门面向对象语言,并且java中万物皆对象,可以说对象是java代码的基本单元,所以说对于对象的内存分析显得很重要

一个对象的内存图

在创建对象时会执行以下操作:

其中的类的加载是在创建对象之前会判断该类是否加载,如果已经被加载,将不会被加载,类只会被加载一次
具体步骤参考


以上代码的内存图:

对以上内存图的说明

1.对执行流程的分析:

我们的测试类StudentTest由我们的JVM自动加载,StudentTest类的字节码文件(里面细致包含main方法)将会被加载到方法区,然后由我们的JVM调用main方法,我们的程序由此开始

首先我们的main方法进行栈中,然后在创建对象时,Student s 局部变量会进入栈中,执行右边创建对象时,会先进行类的加载检查如果该类没有被加载,才会把它的字节码文件(细致包含String name,int age 变量和study方法)加载到方法区中,然后new关键字会开辟堆内存空间

在开辟空间时,会将方法区中的成员变量复制一份到堆空间中,并将成员方法的地址值拷贝一份到堆空间(为了我们以后调用方法时能找到方法)之后会执行java的默认初始化和显示初始化,然后再执行构造方法的初始化。最后将堆内存中的地址返回给在栈中的局部变量

在栈中会临时储存要调用的方法和局部变量,当该方法被调用完将会出栈,方法中的局部变量也会随之消失

2个对象的内存图


注意:2个对象的类的字节码文件只会被加载一次,在方法区中只有1个该类的字节码文件

2个引用指向同一个对象的情况

  • 有这样一段代码


内存图如下

数组的内存图

数组也是一种引用数据类型,我们可以仿照分析对象的内存图的形式来分析它


对象是通过对象去获取值,而数组是根据索引去获取值

标签:java,对象,创建对象,内存,方法,加载
From: https://www.cnblogs.com/swtaa/p/17149651.html

相关文章

  • 06. Kubernetes - 资源对象(Pod)
    PodPod是Kubernetes最基本的调度单元。在一个复杂的系统中,往往某些应用的关系是非常密切的,它们需要共享某些资源。如果都运行在同一个容器内,会面临一个问题,容器运......
  • 18、实体类对象比对-JSON
    实体类对象相互比较-JSON方式:在实际开发中,我们经常需要比较同一个自定义类型的两个不同对象的属性值是否相等,采用JSON方式比较可快速有效实现相关需求。JSONobject是FastJ......
  • 57.对象数组
      声明对象数组的的方法与声明标准类型数组相同:Stockmystuff[4];  当程序创建未被显式初始化的类对象时,总是调用默认构造函数。上述声明要求,这个类要么没有显式地......
  • ES6-ES11 对象的简化写法
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • C++的内存模型
    C++的内存包含4个大区,它们分别是代码区、全局区、栈区和堆区。以下将对它们的分区进行进一步的阐述。代码区:对于一段代码,首先要经过编译之后生成可执行文件才能执行,在Wi......
  • 深入学习jquery源码之创建科学、复用率高的对象
    常规创建对象的方式通过{},[]来定义数组和对象1.{}大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。2.[]中括号,表示一个数组,也可以理解为一个数组对象......
  • jvm-内存调优
    jvm-内存调优1.jvm内置命令jps列出正在运行的jvm虚拟机进程,并显示虚拟机执行朱磊名称以及这些进程的本地虚拟机唯一ID-q:仅输出进程id-m:输出main方法的参数-......
  • 面向对象高级1-static&继承
    1,static1,static修饰成员变量static静态,可以修饰成员变量、成员方法。成员变量按照有无static修饰可以分为两种:类变量:属于类,与类一起加载一次,在内存中只有一份,可......
  • refactorObjectProperties:裁剪、添加对象字段或更新字段内容
    介绍根据模板,自动对一个JS对象的字段进行裁剪、添加或更新字段内容。比如,做一个设置功能,其设置的数据(一个对象)存储在localStorage中,如果增加了设置项或删除设置项、......
  • KingbaseES Json 系列二:Json对象函数
    KingbaseESJson系列二--Json对象函数(JSONB_BUILD_OBJECT,JSONB_OBJECT,JSON_BUILD_OBJECT,JSON_OBJECT)JSON数据类型是用来存储JSON(JavaScriptObjectNotation)数据......