java堆栈,常量池的浅析

    xiaoxiao2022-06-28  26

    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

    固态存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。一般存在电脑硬盘上。

    转载请注明原文地址: https://ju.6miu.com/read-1124284.html

    最新回复(0)