java中堆(heap)和堆栈(stack)的区别
1、栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。
2、stack 和 heap 都是内存的一部分,stack 空间小,速度比较快, 用来放对象的引用,heap 空间大,一般所有创建的对象都放在这里。
3、 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
4、举例:
数据类型 变量名;这样定义的东西在栈区。
如:Object a =null; 只在栈内存中分配空间
new 数据类型();或者malloc(长度); 这样定义的东西就在堆区
如:Object b =new Object(); 则在堆内存中分配空间
|