一、三种情况的对象内存图

(1)Java内存分配介绍:

  1. 栈:
  2. 队:
  3. 方法区(jdk7):加载字节码文件、(从jdk8开始取消方法区,新增元空间,把原来方法区的多种功能进行拆分,有的功能放到堆中,有的功能放到元空间中)
  4. 本地方法区:
  5. 寄存器:

(2)一个对象的内存图

Student s = new Student();
  1. 加载class文件:把student类的字节码文件加载到方法区

  2. 声明局部变量:对s进行声明

  3. 在堆内存中开辟一个空间:new关键字在堆里面开辟一个空间,这个空间就是对象(放在一个地址值中)

  4. 默认初始化:对第3部进行赋值

  5. 显示初始化:对第3部进行赋值

  6. 构造方法初始化:对第3部进行赋值

  7. 将堆内存中的地址值赋值给左边的局部变量

eg:

study执行后出栈,main方法执行完毕出栈,main里面的变量也会消失,mian里面的指向也会消失,当main没有任何东西指向堆内存的时候,堆内存存储的变量和相应的值也会消失变成垃圾

(3)多个对象的内存图

注意:s1和s2两个空间互相独立,不会相互影响。s1.study和s2.study调用完毕后会进行出栈处理,main方法执行完毕出栈,s1和s2没有任何东西调用堆内存会消变成垃圾

(4)两个引用变量指向同一个对象内存图:

stu1被stu2覆盖,相应的值也会发生改变

此时堆内存没有任何东西指向,堆内存里面的变量声明消失,然后买呢方法执行完毕进行出栈

二、基本数据类型和引用数据类型

(1)基本数据类型:在变量中存储的是真实的数据的值

  1. 整数类型

  2. 浮点数类型

  3. 布尔类型

  4. 字符类型

(2)引用数据类型:在代码当中创建的任意对象和数组都是引用数据类型

引用数据类型:使用其他空间的数据

eg1:

eg2:

总结:

1. 基本数据类型:

数据值存储在自己的空间中

特点:赋值给其他变量也是赋的真实的值

2.引用数据类型:

数据值是存储在其他空间中,自己空间中存储的是地址值

特点:赋值给其他变量,赋的地址值,地址值存储的才是真实的数据

java的对象内存和数据类型的更多相关文章

  1. Java单个对象内存布局.md

    我们在如何获取一个Java对象所占内存大小的文章中写了一个获取Java对象所占内存大小的工具类(ObjectSizeFetcher),那么接下来,我们使用这个工具类来看一下Java中各种类型的对象所占 ...

  2. Java常见对象内存分析

    首先要明确Java内存的个位置上放的是啥 类.对象.实例三者的关系: 1.类:是对象的模板,可以实例化对象.(this不能出现在静态方法中) 2.对象:类的个体. 3.实例:实现的对象. 4.对应的引 ...

  3. Java进阶3. 内存回收机制

    Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...

  4. Java虚拟机14:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个 ...

  5. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  6. Ehcache计算Java对象内存大小

    在EHCache中,可以设置maxBytesLocalHeap.maxBytesLocalOffHeap.maxBytesLocalDisk值,以控制Cache占用的内存.磁盘的大小(注:这里Off ...

  7. Java虚拟机18:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个 ...

  8. java对象内存大小评估

    Java对象的内存布局:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).无论是32位还是64位的HotSpot,使用的都是8字节对齐.也就是说每个java对 ...

  9. Java面向对象_对象内存分析—值传递和引用传递

    对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者 ...

  10. Java实例化对象过程中的内存分配

    Java实例化对象过程中的内存分配: https://blog.csdn.net/qq_36934826/article/details/82685791 问题引入这里先定义一个很不标准的“书”类,这 ...

随机推荐

  1. 4.if语句--《Python编程:从入门到实践》

    4.1 检查多个条件   1.使用 and 检查多个条件   2.使用 or 检查多个条件 4.2 检查特定值是否包含在列表中   使用 in 检查特定值是否在列表中 >>> req ...

  2. 测距工具部分情况下无效的问题解决 - 高德JSAPI

    最近项目中新增了一个需求是在地图上新增一个测距工具,方便看一下距离 高德官方本身自带了有一个测距工具类的 RangingTool ,以插件的方式引入即可 问题一: 如果地图上有覆盖物的话(我这是 po ...

  3. 开源.NetCore通用工具库Xmtool使用连载 - OSS文件上传篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的图像处理类库,今天我们继续为大家介绍其中的OSS文件上传类库. 将本地文件上传到服务器是软件系统经常会遇到的需求,例如:设置用 ...

  4. 《Boosting Document-Level Relation Extraction by Mining and Injecting Logical Rules》论文阅读笔记

    代码 原文地址 摘要 文档级关系抽取(DocRE)旨在从文档中抽取出所有实体对的关系.DocRE 面临的一个主要难题是实体对关系之间的复杂依赖性.与大部分隐式地学习强大表示的现有方法不同,最新的 Lo ...

  5. 从零开始学正则(七:终章),详解常用正则API与你可能不知道的正则坑

     壹 ❀ 引 花了差不多半个月的晚上时间,正则入门学习也步入尾声了,当然正则的学习还将继续.不得不说学习成效非常明显,已能看懂大部分正则以及写出不太复杂的正则,比如帮组长写正则验证文件路径正确性,再如 ...

  6. Linux 中hdparm命令使用说明——带实例

    详解Linux中hdparm命令查看硬盘信息的用法 功能说明:显示与设定硬盘的参数. 语 法:hdparm [-CfghiIqtTvyYZ][-a ][-A <0或1>][-c ][-d ...

  7. js数组类型

    js数组类型: 数组检测 1.判断变量是否为数组类型: arr1 instanceof Array Array.isArray(arr1); true 转换方法 toString()方法,以便返回数组 ...

  8. MyBaits查询MySQL日期类型结果相差8个小时

    问题描述 在Java项目中使用MyBatis作为ORM框架,但是查询出的MySQL日期类型字段值总是比数据库表里的值多8个小时. 具体说明: MySQL数据库表字段类型为timestamp,映射的Ja ...

  9. 硬件开发笔记(七): 硬件开发基本流程,制作一个USB转RS232的模块(六):创建0603封装并关联原理图元器件

    前言   有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了贴片电阻电容0603芯片封装,创建 ...

  10. click模块解析命令行参数

    click模块解析命令行参数 安装 pip install click 操作步骤 1)使用@click.command()装饰一个函数,使之成为命令行接口 2)使用@click.option()等装饰 ...