堆的内存和栈的内存游什么不同???

apple21 2005-05-07 03:38:54
堆的内存和栈的内存游什么不同???
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghongtaoleifeng 2005-05-07
  • 打赏
  • 举报
回复
想起一句话:方法入stack 对象动态在heap
007remember 2005-05-07
  • 打赏
  • 举报
回复
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
edward0716 2005-05-07
  • 打赏
  • 举报
回复
学习了
ycybom 2005-05-07
  • 打赏
  • 举报
回复
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放在c++和c中是程序员的职责,如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。在java中是JVM的职责,由垃圾收集机制负责回收。
据个例子:void f() { int* p=new int[5]; } 一句话就包含了堆与栈:汇编代码可以看到他们的不同:
00401028 push 14h
0040102A call operator new (00401060)
0040102F add esp,4
00401032 mov dword ptr [ebp-8],eax
00401035 mov eax,dword ptr [ebp-8]
00401038 mov dword ptr [ebp-4],eax

kaleon 2005-05-07
  • 打赏
  • 举报
回复
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间,它的管理是由垃圾回收来负责的:不给程序员显式释放对象的能力。Java不规定具体使用的垃圾回收算法,可以根据系统的需求使用各种各样的算法。
kingfish 2005-05-07
  • 打赏
  • 举报
回复
都是存储空间,JVM做了区分而已。

每个JVM有1个堆,多个线程共享:存放类实例、数组。
每个线程启动时JVM会分配1个栈给它:存放线程状态

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧