java中heap和stack的区别
来源:互联网 发布:3g移动嵌入式软件开发 编辑:程序博客网 时间:2024/06/05 20:25
1、java堆
java堆是用于存储java对象的内存区域,堆的大小在JVM启动时就一次向操作系统申请完成,通过-Xmx和-Xms两个选项来控制大小,Xmx表示堆的最大大小,Xms表示初始大小。一旦分配完成,堆的大小就将固定,不能在内存不够时再向操作系统重新申请,同时当内存空闲时也不能将多余的空间交还给操作系统,
在java堆中内存空间的管理由JVM控制,对象创建由JAVA应用程序控制,但是对象所占的空间释放由管理堆内存的垃圾收集器完成,根据垃圾收集(GC)算法的不同,内存的回收方式和时机也不同,
2、java 栈
java栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的java栈,在这个java栈中又会含有多个栈帧,这些栈帧是与每个方法关联起来的,每运行一个方法就创建一个栈帧,每个栈帧会含有一些内部变量(在方法内定义的变量)、操作栈和方法返回值等信息。
每当一个方法执行完毕时,这个栈祯就会弹出栈帧的元素作为这个方法的返回值,并清除这个栈帧,java栈的栈顶的栈帧就是当前正在执行的活动栈,也就是当前正在执行的方法,PC寄存器也会执行这个地址,只有这个活动的栈帧的本地变量可以被操作栈使用,当在这个栈帧中调用另一个方法时,与之对应的一个新的栈帧又被创建,这个新创建的栈帧又被放到java栈的顶部,变为当前活动的栈帧,同样现在只有这个栈帧的本地变量才能被使用,当在这个栈帧中所有指令执行完成时这个栈帧移出java栈,刚才的那个栈帧又变为活动栈帧,前面的栈帧的返回值又变为这个栈帧的操作栈中的一个操作数,如果前面的栈帧没有返回值,那么当前的栈帧的操作栈的操作数没有变化。
由于java栈是与java线程对应起来的,这个数据不是线程共享的,所以我们不用关系它的数据一致性问题,也不会存在同步锁的问题
阅读全文
0 0
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- JAVA中Stack和Heap的区别
- Java中 stack和heap的区别
- java中heap和stack的区别
- java中栈(stack)和堆(heap)的区别
- java中栈(stack)和堆(heap)的区别
- Java中Stack栈和Heap堆的区别
- Java中堆(heap)和堆栈(stack)的区别
- java中堆(heap)和堆栈(stack)的区别
- 操作系统-页面置换算法-先进先出置换算法
- PHP获取程序执行时间
- switch 条件判断练习 工资评定
- 网站集群架构搭建
- [Android]自己动手做个拼图游戏
- java中heap和stack的区别
- 返回指针变量的函数
- 《Java并发编程的艺术》第一章——并发编程的挑战
- linux ping: command not found
- OpenGL从1.0开始--纹理与表面细节
- tensorflow学习笔记一之tensorflow实现卷积部分常用函数
- java继承多态和抽象类接口
- flask 简单目标及其安装使用
- python开发平台PyCharm最好的一种编辑环境配置(字体大小和颜色)