【Java基础】——浅谈堆栈内存

    关于内存这一部分的处理,在程序中是极为重要的,这不仅关乎程序运行的速度而且还会对程序能否正常运行,以及对支持程序运行的硬件设备也是同样有需求的。小编也是把自己最近接触到的写出来,如有错误之处,恳请大家斧正。

    在程序的运行过程中,会把内存分割成很多部分,这篇文章主要讲解堆栈的问题。

    何为栈?

    运行时对象区,就是所有在方法中定义的变量,变量的存放区,则为栈内存。随着方法的结束,栈内存也会自然摧毁。

    何为堆?

    运行时数据区,就是所有在方法中创建对象时,这个对象存放的地方,则为堆内存。在堆内存的对象可以被反复利用,不会伴随方法的结束而销毁。


图中讲解的主要是定义变量和给变量赋值时关于内存分析的处理。


    值传递和址传递

随带说一下值传递(值类型)和址传递(引用类型)结合内存分析一下。

值传递

public class Value
{
	
	public static void main(String[] args)
	{
		int a = 6;
		int b = 9;
		swap(a,b);
		System.out.println("交换之后 a的值是:" + a + ";b的值是:" + b);
	}
	public static void swap(int a,int b)
	{
		int temp = a;
		a = b;
		b = temp;
		System.out.println("swap方法里 a的值是:" + a + ";b的值是:" + b);
	}
}
运行结果

    

内存分析

   

址传递 

public class address{
 
	public static void swap(DataWrap dw){
		int temp = dw.a;
		dw.a = dw.b;
		dw.b = temp;
		System.out.println("swap方法里 a的值是:" + dw.a + ";b的值是:" + dw.b);
	}
	public static void main(String[] args){
		DataWrap dw = new DataWrap();
		dw.a = 6;
		dw.b = 9;
		swap(dw);
		System.out.println("交换之后 a的值是:" + dw.a + ";b的值是:" + dw.b);
	}
}
   class DataWrap{
		int a;
		int b;
	}

运行结果

   

内存分析


    上边两个方法不同之处在于一个传的是值类型的,而另一个传递是引用类型,后者伴随方法的结束,其保存数据的栈也被销毁,指向堆区域的指针消失了。而前者的数据保存在当前方法的栈用,依旧存在。

【总结】

    主要是何时会产生栈和堆内存,深入的内存还得慢慢学习啊。关于内存的回收,Java中垃圾回收机制,当对象不再被引用,建议把对象设为null,便于垃圾回收机制的识别,加快回收速度。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mandy_i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值