请问两者都是什么样的数据结构,如何存储?有何区别?
解决方案 »
- java 程序 textarea 粗体和斜体
- 为什么搞java的一定要会JSP,JavaScript之类的?
- 急!!tomcat启动报错:Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
- java 有什么好书介绍?
- 关于java外部类的访问 在线等
- 一个java线程程序。看看那有不足之处。 谢谢指点。我不指点这个程序能处理100个左右的线程运行。跪求!
- 如何利用反射调用构造函数
- javadoc问题,解答对了要多少分就给多少。
- 在浏览器运行applet时,如果没有安装java plug-in怎么样提示用户?
- 有木有在项目中遇到代码表这个概念的?
- 有用过反汇编的帮我看下!
- 郁闷中,我的程序到底怎么啦?求大虾帮我看看
栈是后进先出,每个线程有一个自己的栈。
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,java垃圾回收器会自动收走这些不再使用的数据。缺点是,由于要在运行时动态分配内存,存取速度较慢。
而栈每个线程有一个,像函数参数之类的存储等(入栈、出栈...)
堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理
普通变量和对象用栈
这里只说说程序在内存中如何分配的吧:
1.代码区-存放程序的代码,即程序中的各个函数代码块
2.全局数据区-存放程序的全局数据和静态数据
3.堆区-存放程序的动态数据
4.栈区-存放程序的局部数据,即各个函数中的数据
栈对与函数调用和递归是很有用的,比如你定义的函数的参数存放地址,返回地址,在栈里是有严格的顺序的;堆在程序运行的时候分配,堆内存也称动态内存,在C语言里有malloc()和free()两个函数,C++里有new和delete关键字,Java里只有new了,程序运行完毕,堆也不存在了(除非你漏写了free()或者delete).所以觉得能精通C或者C++很牛,也很不容易~
我想java 也应该是这样。