java哪些数据存在堆里哪些数据存在栈里
展开全部
栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
展开全部
1、就Array arr = new Array();
而言,它的存储就分在等号两边。
先差分他 Array arr = new Array();
等价于
Array arr = null;//被称为初始化。
arr = new Array();//被称为实例化
初始化的时候,编译器自动在栈中,分配一个地址空间给arr.栈存放的是一个地址,可以这么认为。便于记忆,就把栈看做存放初始化的空间。
实例化的时候,编译器会分配一个堆的空间。存放变量等。如arr = new Array();就是存放在堆里的。String str = "GJHJH";这里的GJHJH也是存放在堆里的。
记住 栈的空间比堆的空间要小。
Java中。堆是自动去分配的。不像C需要去指定。很方便。但却牺牲了速度!
而言,它的存储就分在等号两边。
先差分他 Array arr = new Array();
等价于
Array arr = null;//被称为初始化。
arr = new Array();//被称为实例化
初始化的时候,编译器自动在栈中,分配一个地址空间给arr.栈存放的是一个地址,可以这么认为。便于记忆,就把栈看做存放初始化的空间。
实例化的时候,编译器会分配一个堆的空间。存放变量等。如arr = new Array();就是存放在堆里的。String str = "GJHJH";这里的GJHJH也是存放在堆里的。
记住 栈的空间比堆的空间要小。
Java中。堆是自动去分配的。不像C需要去指定。很方便。但却牺牲了速度!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
堆栈概念的提出 只是出于数据安全考虑的,所以呢是不是存放在栈里取决于你怎么使用数据,递归就是始终栈的典型例子
堆,可以向成一块内存,你想怎么用就怎么用,怎么取数据,怎么放都行,就是像个个垃圾堆一样,不用考虑顺序的问题,而栈就想谷仓一样,只能从上面放,上面取,
其实这两个概念从现实什么中的堆 和 栈的实际事物就可以知道了
想想字典里面怎么解释堆和栈的吧
怎么使用取决于你的建模,
堆,可以向成一块内存,你想怎么用就怎么用,怎么取数据,怎么放都行,就是像个个垃圾堆一样,不用考虑顺序的问题,而栈就想谷仓一样,只能从上面放,上面取,
其实这两个概念从现实什么中的堆 和 栈的实际事物就可以知道了
想想字典里面怎么解释堆和栈的吧
怎么使用取决于你的建模,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询