栈:用来存储局部变量、形参、方法的返回值、中间的运算结果。
特点:a、先进后出(后进先出)
b、自动弹栈
堆:用来存储成员变量(属性)、数组的对象、方法的引用。
特点:a、由双链表实现的
b、用户不能直接访问
c、堆区的数据不能自动回收
队列:是一种先进先出的线性表。
特点:a、先进后出(后进先出)
b、自动弹栈
堆:用来存储成员变量(属性)、数组的对象、方法的引用。
特点:a、由双链表实现的
b、用户不能直接访问
c、堆区的数据不能自动回收
队列:是一种先进先出的线性表。
解决方案 »
- JDialog监听器问题
- 我是JAVA新手,我安装了JDK1.7系统变量也配置好了,但是为什么我在运行窗口里输入javac却显示'javac'不是内部或外部命令,也不是可运行的程序或批处理文件。
- 老问题,格式化时间,如何将类似“39142”之类显示成2007-03-01?
- 有关java线程的一个有趣例子
- 一個構建JTable的問題
- jxl读取excel问题,如何判断一个单元格是否为空
- sqlserver2000 操作出错,请高手指点:
- 请问今年java是否已开始有中文版的考试
- 谁能告诉我JAVA怎样快速的入门?
- c在linux下有ncursor,java在linux下有什么?
- 请大神帮忙在这个java聊天室里添加一个文件实时传输功能!!!
- 求助:如何解决错误: 无法将类 ST中的方法 addAggr应用到给定类型?(mvn相关,linphone在win7下编译,antlr3相关,标题要长)
heap和stack有什么区别。
java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
说出ArrayList,Vector, LinkedList的存储性能和特性 ?
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
jvm 内存 主要包括
程序计数器(线程私有) 程序执行指令(比如当前正在执行某条语句,程序计数器会告诉jvm下一条语句是什么)
jvm 栈 (线程私有) 存放方法中的局部变量等
本地 方法 栈(线程私有) java调用 非java方法时开辟的一块空间
堆内存 (线程共享) new出来的对象都存在在这块内存空间
方法区(线程共享) 存放常量,字面量,类的信息,class文件信息 ,加载器信息等等只能简单的介绍一下了,如果要更深入的了解的话,就找找jvm内存相关的资料吧