java堆栈,常量池的浅析
2016-09-14 13:26
260 查看
java中有6大存储数据的地方:寄存器、堆、栈、常量池、静态存储、固态存储。
其中寄存器是存在计算机cpu里面,处理速度最快,但是由于寄存器存储空间很有限,只能CPU进行控制存储,jvm是没有权限去存储数据在寄存器中的
栈是位于ram中的,一般用于存储基本类型的变量以及对象的引用,由于栈的里的变量是加载类的时候就放进了栈中,所以存取要比堆快,但是栈里面的存储的数据生命周期是知道的,局部变量等所在的方法不在使用就清空了,全局变量等所在的对象不在使用了就清空了。
堆也是位于ram中的,堆的存储是动态的,java中当new一个对象的时候就从堆里面分配一个内存空间用于存储对象的内容,然后把对象引用放在栈中,引用指向堆中的对象。堆中的数据的生命周期是不确定的,其中的对象由java的垃圾回收机制进行回收
当讨论常量池的时候我们需要讨论一个特殊的对象String str="你好",当我们新建一个str字符串的时候,str作为一个引用是存在栈中的,而“你好”的存储这时候需要去常量池找“你好”,如果没有找到就开辟一个内容为“你好”的存储空间,如果有str就直接指向这个存储空间,而String
str=new String("你好"),这个就跟上面那个有区别了,首先一样的str引用是存储在栈中,然后再去常量池中找内容是“你好”的存储内存,如果存在就直接指向,不存在就再新建一个,不要以为这时候就结束了,因为new了一个对象,所以它还要在堆中存储一个内容为“你好”的对象,所以String str=new String("你好")的时候可能创建了两个对象也可能创建了一个对象。常量池还可以放置final变量。常量池也是在ram中的。
静态存储是在rom中的,静态存储里存放程序运行时一直存在的数据例如static
final int i=1
固态存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。一般存在电脑硬盘上。
其中寄存器是存在计算机cpu里面,处理速度最快,但是由于寄存器存储空间很有限,只能CPU进行控制存储,jvm是没有权限去存储数据在寄存器中的
栈是位于ram中的,一般用于存储基本类型的变量以及对象的引用,由于栈的里的变量是加载类的时候就放进了栈中,所以存取要比堆快,但是栈里面的存储的数据生命周期是知道的,局部变量等所在的方法不在使用就清空了,全局变量等所在的对象不在使用了就清空了。
堆也是位于ram中的,堆的存储是动态的,java中当new一个对象的时候就从堆里面分配一个内存空间用于存储对象的内容,然后把对象引用放在栈中,引用指向堆中的对象。堆中的数据的生命周期是不确定的,其中的对象由java的垃圾回收机制进行回收
当讨论常量池的时候我们需要讨论一个特殊的对象String str="你好",当我们新建一个str字符串的时候,str作为一个引用是存在栈中的,而“你好”的存储这时候需要去常量池找“你好”,如果没有找到就开辟一个内容为“你好”的存储空间,如果有str就直接指向这个存储空间,而String
str=new String("你好"),这个就跟上面那个有区别了,首先一样的str引用是存储在栈中,然后再去常量池中找内容是“你好”的存储内存,如果存在就直接指向,不存在就再新建一个,不要以为这时候就结束了,因为new了一个对象,所以它还要在堆中存储一个内容为“你好”的对象,所以String str=new String("你好")的时候可能创建了两个对象也可能创建了一个对象。常量池还可以放置final变量。常量池也是在ram中的。
静态存储是在rom中的,静态存储里存放程序运行时一直存在的数据例如static
final int i=1
固态存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。一般存在电脑硬盘上。
相关文章推荐
- 黑马程序员--java堆栈常量池
- Java笔记之常量池浅析
- Java中的堆栈内存浅析
- java 堆栈常量池,String创建图解
- Java中堆栈常量池等内存分配原理详解
- java内存中的堆栈、堆、静态区、常量池
- java堆栈常量池
- java堆栈 常量池 方法区
- 浅析Java中Date类的应用(转)
- 用"堆栈区数据复制"理解Java赋值和参数传递机制的心得
- Java vs C# —— 浅析J2EE与.NET平台优劣
- 浅析Java语言中的内部类
- 浅析Java语言中两种异常的差别
- 浅析Java中Data类的应用
- 用"堆栈区数据复制"理解Java赋值和参数传递?机制的心得
- 浅析Java中Data类的应用
- 浅析java回调机制
- 浅析Java语言中的内部类
- 浅析Java的“克隆”方法[zt]
- 浅析Java语言中的内部类《转载》