Java对象在内存的布局

前言

今天主要是想将一件事,Java对象在内存的布局。


首先先了解以下Java中内存的分区(简单分区,讲解对象在内存的分区足够了)。
在JVM内存中,简单的分为:

  • 栈区。主要存放局部变量,常见于创建一个对象都是在栈区。
  • 堆区,堆区中又有方法区,方法区里又有常量区。堆区常见存放类中的数据,属性和方法。常量区常见存放字符串类型的数据。

来一段简单的代码:

//定义一个狗类,里面有三个属性
class Dog 
{
	int age ;
	String name ;
	String color ;
	
}
public class Object
{
	 public static void main(String[] args)
	 {
		Dog dog = new Dog(); //创建一个狗的对象dog
		dog.age = 3;
		dog.name = "小黑";
		dog.color = "黑色"}
}

代码非常简单,就是定义一个Dog类,并且创建一个dog对象,给其赋值,我们主要来观察以下这段代码执行时候对象dog在内存是如何布局的。

		Dog dog = new Dog(); //创建一个狗的对象dog
		dog.age = 3;
		dog.name = "小黑";
		dog.color = "黑色"
  1. 首先 执行第一行代码 Dog dog = new Dog(); 会加载类中的信息,加载属性信息方法信息,加载到哪儿呢?属性信息加载到堆区(主要细节下次讲),方法信息加载到方法区(该知识在下一篇文章讲)。此时,堆区会分配到一段空间存放属性的初始值。并且在栈区开辟一段空间,保存对象dog,由于对象属于引用类型,所以该对象会指向堆区中的内存空间。
  2. 执行第二行代码 dog.age = 3; 给age赋值为 3,该赋值是在堆区进行的。
  3. 执行第三行代码 dog.name = “小黑”; 给name属性赋值为 小黑,但是由于小黑 是字符串类型,字符串类型也是属于引用类型,所以在堆区存放的是字符串的地址,字符串的值保存在方法区中的常量区。
  4. 执行最后一行代码和第三行一样。
    分区图如下:
    对象在内存的布局

总结

对象在内存的分区就大概到这里了,以后还会分享对象在内存中的分配机制,方法(函数)的调用机制,传参机制。感谢观看!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值