java堆栈笔记

来源:互联网 发布:windows隐藏窗口样式 编辑:程序博客网 时间:2024/06/06 05:15
堆和栈数据都存储在内存中,与C++不同,Java自动管理堆栈,程序猿不能直接设置堆或栈。
栈:
1. 存取速度快,仅次于CPU中的寄存器。栈数据可共享。
2. 存在栈中的数据大小与生存周期是确定的,缺乏灵活性
基本数据类型与对象的引用变量存储于栈中,当超过变量作用域后,java会自动释放该变量分配的栈内存。对于int a = 3;编译器先创建一个变量a的引用,然后查找有没有值为3的地址,如果没有就开辟一个存放3的地址,然后将a指向3的地址。
函数参数的即保存在栈中,函数调用中参数传递即通过栈实现。
   对于包装起来的数据类型,其存储于堆中,动态创建。


堆:
1. 在程序运行时分配内存,存取速度慢
2. 优势是可以动态分配内存大小,生存周期也不必事先告诉编译器,Java垃圾回收期会自动回收不使用的堆内存。


在堆中分配内存,由Java虚拟机来管理。A a = new A();过程是现在堆中产生一个对象A,然后在栈中定义一个特殊的变量,变量的取值即为数组或对象在堆内的首地址,在栈中的这个特殊变量就变成了数组或对象的引用,以后就可以在程序中使用栈内存中的引用变量来访问堆中的对象。
引用变量是普通变量,定义时在栈中分配内存,当程序运行到其作用域外时会被释放。当对象或数组没有引用变量时,变成了垃圾,不能再被使用,随时可能被回收。



静态存储:是指在编译时就能确定每个数据目标在运行时刻需要的存储空间。
栈式存储:在编译时无法知道所需内存大小,只有在程序运行到一个程序模块时,才知道该程序模块所需数据区大小,然后为其分配内存。
0 0
原创粉丝点击