堆和栈

java程序在运行的时候需要开辟空间,JVM在运行时也是要开辟空间的,因为不同的片区运行的程序不同,JVM的内存主要分为五大片区:

  1. 寄存器
  2. 本地方法区
  3. 方法区
  4. 栈内存
  5. 堆内存

这里我们主要说下栈和堆:
首先java中主要存在两种数据类型:

  1. 基本数据类型
  2. 引用数据类型
    在这里插入图片描述
    栈内存:
  3. 它是一片存储区域
  4. 栈内存只能存储局部变量和基本数据数据类型
  5. 栈内存的数据是先进后出,就类似于给手枪装子弹一样,第一个装进去的最后才会打出来。
  6. 栈内存的更新很快,因为局部变量的生命周期都很短,所以其空间相对较小。

在这里顺便提一下什么是局部变量:

  1. 在方法中定义的变量;
  2. for循环内部定义的变量;

堆内存:堆内存中存放的都是数组和对象,最后会有垃圾回收机制不定时收取。

下面来根据代码来理解一下:

public class Test {
	public static void game() {
		int a =10;
		//System.out.println(a);
	}
	public static void main(String[] args) {
		int i = 4;
		game();
		//System.out.println(i);
	}
}

程序的执行步骤:

  1. JVM先找到main函数并执行
  2. 在栈内存中开辟空间,创建int类型的i并存放数值4
  3. 然后在执行game方法,在栈内存中再开辟一个新空间,创建int类型的a变量,并赋值10
  4. 栈内存中的方法执行结束后就自动释放了。

图解:(这个过程中不涉及到堆内存)
在这里插入图片描述

第二种:

public class Test1 {
	int a = 4;
	String s = "abc";
	
	
	public void game() {
		int a = 45;
		System.out.println(a);
	}
	
	public static void main(String[] args) {
		Test1 t = new Test1();
		t.game();	
	}
}
  1. 首先找到main函数
  2. 执行Test1 t = new Test1(); :
  3. 首先,执行右边,在堆内存中开辟一块空间里面存放着
    int a = 4;
    String s = “abc”;
    并有了一个连续的二进制地址
  4. 在执行左边,栈中开辟一块空间,定义变量t
  5. 最后执行中间的=,意思是栈中的变量t指向堆空间中的地址
  6. 然后执行t.game();这个是在方法区执行的,在堆中开辟空间的时候堆中就有一个地址是指向t.game();的,然后继续在栈里面创建a变量并赋值。
  7. 最后栈中的空间用完了之后就会自动释放,而堆中的空间会有垃圾回收机制来释放(类似扫地机器人)。

图解:

在这里插入图片描述

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值