类在内存上的简单分析(基础分析向)

类除了我们写的方法,属性等等,在内存上还保存着什么???

我们来刨析以下类在内存上的构析
首先我们先学会以下命令行,在接下来测试类所占字节数时,需要用到。

  1. 微软符号键 + R 在打开里输入 cmd 进入命令提示框
  2. d: 或者 f: (取决于你想进那个盘)切换到目标盘
  3. cd + 空格 + 目标文件夹 进入目标文件夹
  4. javac + java源文件名称 编译目标Java文件
  5. java + java源文件的类名 JVM解释执行 class 字节码文件
  6. jps 查看当前Java进程号
  7. jmp -histo:live + 进程号 + > 1.log(这是输出在当前目录下的文件)

最后我们在打开1.log找到我们创建的对象名。

最后我们会发现,哪怕你的类是空类,创建了对象,但是占有8个字节

如果你在加入一个整型常量 例如 : int a = 1;

编译, 解释执行,查看进程号,再去找对象名,会发现字节数是16个。
但整型不是只占用4个字节么? 8 + 4 应该是12个字节,为什么是16个字节??

我们来解析一下这个问题
首先空类,产生一个对象,照样会生成8个字节,这8个字节被称为我们的对象头
其次,我们加入了一个占用4个字节的整型变量,最后输出的字节数是16字节。其中,8个字节是对象头,4个字节保存了这个整型变量,剩下的4个字节是内存填充(对齐填充),填充到8的倍数。( 8< 8+4 < 8*2 所以最后字节数是16)

一个对象在内存上所占的空间由三部分组成对象头成员变量内存填充(对齐填充)

那么对象怎么样找到我们的成员属性还有方法呢?方法又保存在哪里呢???

所以说,Java的成员方法被放在了方法区,通过方法区的方法表中存储的方法地址,去找到我们要执行的方法,再去执行。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值