浅谈Java中的存储空间类型
来源:互联网 发布:日k线叠加周k线源码 编辑:程序博客网 时间:2024/05/17 05:52
在Thinking in java里,列举了Java的六种存储类型
1.寄存器
编写过汇编程序的应该对寄存器非常熟悉,那时候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特别快,但是数量非常有限。在java中无法直接和寄存器打交道,不过在c中是可以声明寄存器变量的。
2.栈空间
写过汇编的肯定感到非常亲切,在汇编程序里不就是压栈和出栈吗?有一个指针控制栈空间,分配空间是栈指针上移,就是push操作,释放空间指针下移,就是pop操作。当然C和C++也主要是通过栈分配空间的。因为只要压栈和出栈,所以速度特别快。java中的对象引用是通过栈分配的,而java对象不是通过栈分配的,这也是java效率相对差一些的原因吧。通过栈分配空间有一个限制就是必须在编译时确定空间大小,也就是程序运行前就应该可以知道运行时内存的情况。
3.堆空间
就是一个大的内存块,需要的时候就申请分配,java中的对象都是在堆中非配的。但是堆空间的回收是比较麻烦的,所以JVM的回收算法都比较复杂。但是如果堆空间比较大,也就是内存没有面临用完的话,JVM一般不会启动垃圾回收器。这种情况下堆的效率和栈应该差不多,只是堆没有回收空间而已。如果要不时的启动GC的话,可以想象效率会极其低下。
4.静态存储区
声明为static的变量因为他们一直存在(整个程序运行过程中),所以他们被保存在一个静态存储区。
5.常量储存区
声明为final static的为常量,可以保存在常量储存区,还有String类型的对象都是常量,系统维护了一个String常量池。
6.其他存储
非RAM存储器,主要就是磁带,磁盘等等。
这里最关键的应该是栈和堆,栈应该是应用最广泛的,在汇编中函数调用的时候一般是这样的过程:
1.压栈(保护现场)
2.进入方法调用
3.出栈(恢复现场)
这里只是简单的描述,上面的过程可能会有好多嵌套,不过大致过程就是这样,在其他语言其实也是一样的。
- 浅谈Java中的存储空间类型
- 浅谈Java中的存储空间类型
- 浅谈Java中的存储空间类型
- 浅谈Java中的存储空间类型
- Java中的存储空间类型
- 关于Java中的boolean类型所占存储空间
- 浅谈Java中的Enum类型
- C语言中的常量、变量及其属性,类型、存储空间
- 浅谈Java枚举类型
- Java String类型浅谈
- Java基本类型所占存储空间大小的整理
- 浅谈带符号类型的大小与所占存储空间的关系
- oracle-类型存储空间大小
- 浅谈.net中的类型转换
- 浅谈C++中的LPVOID类型
- 浅谈Java泛型中的类型擦除以及编程中的典型错误
- 浅谈java中类型转换
- 浅谈java中的引用
- 枚举类型的用法
- 一些常见的RuntimeException
- WORD使用小经验
- Data WareHouse Base
- DirectShow编程(3.5) - 关于DirectShow - DirectShow中的事件通告
- 浅谈Java中的存储空间类型
- 经典的asp整理 (陆续更新)
- 用C#和数据库实现无限级分类法
- 数据挖掘技术
- 企业信息化系统应该具备的功能之二
- 使用 ASP.NET 以编程方式检查规范化问题
- ASP.NET常用函数
- SQLSERVER扩展存储过程XP_CMDSHELL的简单应用
- 我在遍历List的一个误区