首页 > 系统相关 >java语言基础--对象内存图解

java语言基础--对象内存图解

时间:2023-09-21 23:25:22浏览次数:37  
标签:java 指向 -- s1 对象 Student new 图解 class

在JVM内存里面主要分布有以下三个区域:

  • 栈:存放基础数据和自定义对象的引用
  • 堆:主要存储创建的对象,即new出来的对象。
  • 方法区:加载存放class文件(字节码文件)

创建一个对象:

 

通过上图来看,程序是这样执行的:

  1. 将StudentTest01.class文件加载到方法区
  2. 将Student.class文件加载到方法区
  3. main方法压栈
  4. 在堆里面创建一个Student的对象
  5. 栈里面的s指向堆里面Student对象的内存地址0x0101
  6. 给对象的成员变量进行赋值
  7. 方法弹栈
  8. 程序执行结束

这里面主要说明的一点就是图中的实线,这个实线表示的是s指向Student对象堆内存的地址,s本身并不是对象,而是一个指向。比如酒店里面的房间号1024,1024本身不是房间,只是指向了这个房间的号码,方便住宿人员快速找到该房间。

创建两个对象:

三个指向两个对象:

复制代码
public class StudentTest01{

    public static void main(String[] args){

    Student s = new Student();
    s.name = "张三";
    s.age = 20;
    s.sex = true;
    s.id = 1001;

    Student s1 = new Student();
    s1.id=1002;
    s1.name="李四";
    s1.age=21;
    s1.sex=false;

    Student s2 = s1;

    }
}
复制代码

取消指向:

复制代码
public class StudentTest01{

    public static void main(String[] args){

    Student s = new Student();
    s.name = "张三";
    s.age = 20;
    s.sex = true;
    s.id = 1001;

    s = null;//将s设置为null
    //s.study();报出NullPointerException(空指针异常)

    }
}
复制代码

如果堆里面的对象没有被指向,Java里面有个垃圾回收器会将对象进行回收。开发时不需要手动设置为null,垃圾回收器会自动回收。

标签:java,指向,--,s1,对象,Student,new,图解,class
From: https://www.cnblogs.com/szmtjs10/p/17721219.html

相关文章

  • Docker上运行RabbitMQ,无法访问管理页面
    在CentOS7中的Docker安装并运行了RabbitMQ,但是在访问管理页面http://IP:15672/却提示拒绝访问这是因为在Docker上运行的RabbitMQ,默认情况下是没有启用管理插件和管理页面的使用命令dockerexec-it容器名/bin/bash进入RabbitMQ容器的命令行终端。容器名即CONTAINERID......
  • 【小睿的ML之路】Seaborn-多变量分析绘制
    %matplotlibinlineimportseabornassns#导入seaborn库,用于绘制统计图形。importnumpyasnp#导入numpy库,用于处理数值计算。importpandasaspd#导入pandas库,用于处理数据。importmatplotlibasmpl#导入matplotlib库,用于绘图。importmatplotlib.py......
  • django- 实现模型字段 每天 -1
    fromdjango.dbimportmodelsfromdatetimeimportdatetimeclassMyModel(models.Model):count=models.IntegerField()created_at=models.DateTimeField(auto_now_add=True)defsave(self,*args,**kwargs):ifnotself.created_at:......
  • Java 序列化与反序列化的疑问
    关于序列化和反序列化的疑问为什么需要序列化和反序列化?因为计算机底层存储和传输都是二进制,所以需要将对象转化成字节数组。那么问题来了,只需要转成字节数组就行了,那为啥还要弄这么多东西?搞这么复杂?因为直接转生成的字节数组是不规则的,所以我们不能通过这样的字节数组把原......
  • 湖南大学个人项目互评-中小學数学卷子自动生成程序
    1.功能要求用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户......
  • P1075 [NOIP2012 普及组] 质因数分解
    算法一根据唯一分解定理,小于\(n\)的最大的能整除\(n\)的整数一定就是答案,可以暴力枚举。时间复杂度\(O(n)\),实际得分\(60\)。算法二发现算法一不能通过的原因是较大的那个质数可能的取值范围太大了。而较小的那个质数一定小于等于\(\sqrtn\),我们枚举它即可。时间复......
  • 前端性能优化必杀技:骨架屏让你快人一步
    在现代前端开发中,用户体验和性能优化一直是小伙伴们追求的目标之一。骨架屏(SkeletonScreen)作为一种优化用户界面加载速度的方法,应用在各种(App/小程序/h5)应用里面。本文将深入探讨骨架屏的最佳实践,结合代码案例,介绍如何实现和优化骨架屏。什么是骨架屏?骨架屏是一种在页面加......
  • 高数 - 极限, 微分, 积分
    微分把物体分成非常多的n份,这样每一份都无穷小。记做:dx 积分把无穷小的n份累加起来。积分的符号为∫(sum的s拉长而来)。函数f(x)的积分用表示,意思就是函数f(x)的微分的累加。 微积分a)微积分=微分+积分。b)他有有什么意义?微分,积分的过程中,我们会运用各种公式,然后在......
  • 第一篇博客
    今年已经26了,大学毕业两年,碌碌无为,啥结果也没有。上个月辞职,想换个工作,但是限于目前的环境,找个新的工作真的好难,于是在这个时候,我有了自己的想法,我想找个机构去培训,可能得两三万吧,然后除去辞职所失去的工资,今年我至少得少挣六七万块钱。这次去培训机构必须得产生良好的培训结果。......
  • git submodule多模块开发
     开发中遇见了这样一个问题,ABC三个项目都要使用到同一个模块的一些功能,并且这个模块的功能根据ABC三个项目场景需要一些代码逻辑改动(ABC可以理解为三个使用了不同base工具包的项目,或者相同base工具包但是版本不同等),这个时候git的submodule可能会帮你解决这个问题。......