栈数据结构与Java方法的内存分析

栈数据结构

一、关于栈数据结构:
* 它是一个 “先进后出的数据结构”
* 栈/stack它还是一种特殊的线性表,表尾为栈顶,表头叫栈底
* 关于栈数据结构,我画了个简单的示意图:
* 栈数据结构示意图
* 以下代码用于演示入栈和出栈

/**
*最终输出结果为:
*	main方法入栈//最先入栈
*	m1方法入栈
*	m2方法入栈
*	m3方法入栈//最后入栈
*	m3方法出栈//最先出栈
*	m2方法出栈
*	m1方法出栈
*	main方法出栈//最后出栈
*/
public class StackTest01
{
	//main方法作为程序入口,最先执行,最先入栈
	public static void main(String[] args){
		System.out.println("main方法入栈");
		m1();//调用m1方法,此时程序停在此处,m1方法执行
		System.out.println("main方法出栈");
	}
	//m1方法被调用执行
	public static void m1(){
		System.out.println("m1方法入栈");
		m2();//调用m2方法,此时程序停在此处,m2方法执行
		System.out.println("m1方法出栈");
	}
	//m2方法被调用执行
	public static void m2(){
		System.out.println("m2方法入栈");
		m3();//调用m3方法,此时程序停在此处,m3方法执行
		System.out.println("m2方法出栈");
	}
	//m3方法被调用执行
	public static void m3(){
		System.out.println("m3方法入栈");
		System.out.println("m3方法出栈");
	}//m3方法结束

}

java方法的内存分析

一、方法在执行过程中,在jvm中如何分配内存?

  • 方法只定义,不调用,是不会执行的,并且JVM中也不会给该方法分配“运行所属”的内存空间
  • 在JVM内存划分上有这样三块主要的内存空间(当然,除了这三块之外还有其他的内存空间)
    • 方法区内存:最先有数据,方法代码片段属于.class的一部分.class 生成时,将方法代码片段的字节码文件存放在方法区内存
    • 栈内存:调用(运行)方法时,在栈内存中给该方法分配栈内存空间,此时发生压栈动作;方法执行结束后,分配的栈内存空间全部释放,发生弹栈动作;局部变量在方法体中声明,局部变量运行阶段内存在栈内存中分配
    • 堆内存:主要是为对象分配的内存,方法的内存分析暂不考虑它
    • JVM的这三大内存空间可以简易画个图如下:
      JVM三大内存空间

二、根据一个具体事例分析java方法的内存变化并画图

  • 具体程序代码如下
/**
*该程序功能是先求和再对3取模,然后输出余数
*/
public class MethodTest01
{
	
	public static void main(String[] args){
		int a = 7;
		int b = 9;
		int retValue = sum(a,b);
		System.out.print("retValue = " + retValue);
	}

	public static int sum(int i,int j){
		int result = i + j;
		int num = 3;
		int retValue = mod(result,num);
		return retValue;
	}

	public static int mod(int x,int y){
		int z = x % y;
		return z;
	}

}

内存变化图如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值