java之内存分配

一、内存模型简介

  首先,我们的代码的内存分配都是在jvm上进行的,jvm是应用程序和操作系统的桥梁,正是jvm机制解决了跨平台的问题。所以,java程序的内存分配都是在jvm上进行的。下面说一下常见的内存:寄存器、栈内存、堆内存、常量池。

  寄存器:jvm内部虚拟寄存器,存储速度很快,程序不可控制。

  栈内存:用来保存局部变量的值,主要是基本类型的值和局部对象的引用指针。

  堆内存:存放动态产生的数据,通过new关键字产生的对象。创建出来的对象包含自己的成员变量,并不包含成员方法。同一个类的对象都有自己的成员变量,但是共享成员方法,并非每创建一个对象都复制一次方法。

  常量池:jvm为每一个类的实例对象维护一个常量池,这个常量池就是这个类型用到的常量的有序集合。

  如图:


二、一个java程序的内存分析

源程序:

public class Test {

	public static void main(String[] args) {
		Test test = new Test();// 1
		int date = 10;// 2
		BirthDate d1 = new BirthDate(1,10,2012);// 3
		BirthDate d2 = new BirthDate(10,12,2014);// 4
		test.change1(date);// 5
		test.change2(d1);// 6
		test.change3(d2);// 7
	}
	
	public void change1(int i) {
		i = 123;
	}
	
	public void change2(BirthDate b) {
		b = new BirthDate(13, 12, 2010);
	}
	
	public void change3(BirthDate b) {
		b.setDay(13);
	}
	
}

class BirthDate {
	private int year;
	private int month;
	private int day;
	
	public BirthDate(int day,int month,int year) {
		this.year = year;
		this.month = month;
		this.day = day;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

}
1、执行到第4句后,内存分配情况如下:

2、执行chage1的内存情况:


3、执行change2的内存情况:


4、执行change3内存情况:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值