变量是放在了堆内存还是栈内存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量是放在了堆内存还是栈内存相关的知识,希望对你有一定的参考价值。
变量分为静态变量、动态变量。静态变量在操作系统装载程序时分配固定的数据空间;
程序运行期间的动态变量占用堆内存;
子程序内部定义的变量一般占用栈空间。 参考技术A 栈是存放变量的地方,堆是存放变量值(引用)的地方。 参考技术B 存放在栈。
heap与stack的区别
java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,
会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法
结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new
创建的对象都放在堆里,所以,它不会随方法的结束而消失。 方法中的局部变量使用 final
修饰后,放在堆中,而不是栈中。
会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法
结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new
创建的对象都放在堆里,所以,它不会随方法的结束而消失。 方法中的局部变量使用 final
修饰后,放在堆中,而不是栈中。
区别:
1.heap是堆,stack是栈。
2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。
3.stack空间有限,heap的空间是很大的自由区。
在Java中,
若只是声明一个对象,则先在栈内存中为其分配地址空间,
若再new一下,实例化它,则在堆内存中为其分配地址。
4.举例:
数据类型 变量名;这样定义的东西在栈区。
如:Object a =null; 只在栈内存中分配空间
new 数据类型();或者malloc(长度); 这样定义的东西就在堆区
如:Object b =new Object(); 则在堆内存中分配空间
以上是关于变量是放在了堆内存还是栈内存的主要内容,如果未能解决你的问题,请参考以下文章