Java把内存划分成两种:一种是栈内存,一种是堆内存。的区别
从数据结构上来说,栈的优势是,存取速度比堆快,缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,java垃圾回收器会自动收走这些不再使用的数据。缺点是,由于要在运行时动态分配内存,存取速度较慢。
new出来的object存在堆上, 堆是共享的
而栈每个线程有一个,像函数参数之类的存储等(入栈、出栈...)
对象 在 堆中
变量 引用 在 栈中
这些概念还是在学C++的时候遇到的.大家可能也知道因为C++里面的指针是个很麻烦的东西.它和变量、常量、字符串、数组、函数、指针本身等结合起来不知道有多麻烦。
这里只说说程序在内存中如何分配的吧:
1.代码区-存放程序的代码,即程序中的各个函数代码块
2.全局数据区-存放程序的全局数据和静态数据
3.堆区-存放程序的动态数据
4.栈区-存放程序的局部数据,即各个函数中的数据
栈对与函数调用和递归是很有用的,比如你定义的函数的参数存放地址,返回地址,在栈里是有严格的顺序的;堆在程序运行的时候分配,堆内存也称动态内存,在C语言里有malloc()和free()两个函数,C++里有new和delete关键字,Java里只有new了,程序运行完毕,堆也不存在了(除非你漏写了free()或者delete).
posted on 2006-12-22 09:34
comchyi 阅读(267)
评论(0) 编辑 收藏