Java中堆内存和栈内存详解
Java把内存分成两种,一种叫栈内存,一种叫堆内存。当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。
Java中堆内存和栈内存详解
Java把内存分成两种,一种叫栈内存,一种叫堆内存。
当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。在这个函数中被定义的变量也随之被释放和消失。通过new产生的数组和对象分配在堆内存中。堆内存中分配的内存,由JVM提供的GC(垃圾回收机制)来管理。在堆内存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个战中变量的取值等于堆中对象的首地址。栈内存中的变量就成了堆内存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。引用变量是一个普通的变量,定义时在栈中分配;引用变量在被运行到它的作用域之外时就被释放,而我们的数组和对象本身是在堆中分配的,即使程序运行到使用new产生对象的语句所在的函数或者代码之后,我们刚才被产生的数组和对象也不会被释放。数组和对象只是在没有引用变量指向它,也就是没有任何引用变量的值等于它的首地址,它才会变成垃圾不会被使用,但是它任然占据着内存空间不放(这也就是我们Java比较吃内存的一个原因),在随后一个不确定的时间被垃圾回收器收走。实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!
public class ArrayTest {
Java把内存分成两种,一种叫栈内存,一种叫堆内存。当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。
} public static void main(String [] args){ int x [] = new int [100]; int sum=0; for(int i=0;i<100;i++){ sum+=x[i]; } }
我们可以int x [] = new int [100];分成两部分来写:int x [] ;和x=new int
[100];。第一部分相当于定义了一个普通的变量,只是这个变量中存放的数据是堆中某个对象的首地址。接着我们使用,这一句是在堆内存中产生了一个有100个元素整数类型的数组。
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量都是应用类型。
Person p1 = new Person (); 执行完后的内存状态
Java把内存分成两种,一种叫栈内存,一种叫堆内存。当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。
创建新的对象之后,我们就可以使用“对象名.对象成员”的格式,来访问对象的成员(包括属性和方法)。
public class Person {
int age;
void shout(){
System.out.println(age);
}
public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person();
p1.age=30;
p1.shout();
p2.shout();
}
}
上面程序运行的内存布局如下图:
Java把内存分成两种,一种叫栈内存,一种叫堆内存。当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。
Java中内存分配策略及堆和栈的比较
1、内存分配策略
按照编译原理的观点,程序运行时的内存分配有三种原则,分别是静态的,栈式的,和堆式的。
静态存储分配时指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间。这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为他们都会导致编译程序无法计算准确的存储空间需求。
Java把内存分成两种,一种叫栈内存,一种叫堆内存。当某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈空间。当函数运行结束时,分配给函数的栈空间被收回。
…… 此处隐藏:342字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




