java中的堆、栈和常量池
来源:互联网 发布:光线cms论坛 编辑:程序博客网 时间:2024/05/02 01:23
Java内存分配:
1. 寄存器:我们在程序中无法控制
2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
3. 堆:存放用new产生的数据
4. 静态域:存放在对象中用static定义的静态成员
5. 常量池:存放常量
6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间
----------------------------------------------------------------------------------------------------------------------
对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会自动消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
举个例子吧!
<pre name="code" class="cpp">String str1="abc";String str2="abc";String str3="abc";String str4=new String("abc");String str5=new String("abc");
对于浅蓝色箭头,通过new操作产生一个字符串(“abc”)时,会先去常量池中查找是否有“abc”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此“abc”对象的拷贝对象,所以,对于String str=new String("abc"),如果常量池中原来没有"abc"则产生两个对象,否则产生一个对象。
int a1 = 1, a2 = 1, a3 = 1; Public static final int INT1 = 1; Public static final int INT2 = 1; Public static final int INT3 = 1;
局部变量(形式参数)的数据存于栈内存中,并且它(局部变量)随方法的消失而消失。
总结:
a.栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String,数组.对象等等)但不存放对象内容
b.堆中存放使用new关键字创建的对象.
c.字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好,存放在字符串常量池中,而有的是运行时才被创建.使用new关键字,存放在堆中。
- Java中的栈,堆和常量池
- java中的栈、堆和常量池
- java中的堆、栈和常量池
- java 中的堆 栈和常量池
- java中的堆、栈和常量池
- java 中的堆、栈和常量池
- java中的堆、栈和常量池
- java中的堆、栈和常量池
- java中的堆、栈和常量池
- java中的堆、栈和常量池
- Java中的堆、栈和常量池
- java中的堆、栈和常量池
- Java中的堆、栈 和常量池
- java中的堆、栈和常量池
- java中的堆、栈和常量池
- java中的堆、栈和常量池
- 详细介绍Java中的堆、栈和常量池
- Java堆、栈和常量池在应用中的区别
- 成佩涛-wifi隐藏模式钓鱼
- Phonegap2.9.0本地打包html成ios应用
- Fingerping web application use png
- 黑马程序员 数组
- 双目视觉嵌入式移植校正图像所遇到的问题
- java中的堆、栈和常量池
- 嵌入式开发学习路线图
- 嵌入式系统开发学习如何起步、如何深入?
- windows下用vs2010编译ffmpeg
- 杭电 Digital Roots
- 光棍节的快乐
- 11_数值的整数次方
- hdu 3449 Consumer(0,1背包)
- Android ListView使用详解