快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

浅谈Java中的存储空间类型

在Thinking in java里,列举了Java的六种存储类型
1.寄存器
编写过汇编程序的应该对寄存器异常认识,那时候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特殊快,但是数量异常有限。在java中无法直接和寄存器打交道,不过在c中是可以声明寄存器变量的。

2.栈空间
写过汇编的肯定感到异常亲切,在汇编程序里不就是压栈和出栈吗?有一个指针控制栈空间,分配空间是栈指针上移,就是push操作,释放空间指针下移,就是pop操作。当然C和C++也主要是通过栈分配空间的。因为只要压栈和出栈,所以速度特殊快。java中的对象引用是通过栈分配的,而java对象不是通过栈分配的,这也是java效率相对差一些的原因吧。通过栈分配空间有一个限制就是必须在编译时确定空间大小,也就是程序运行前就应该可以知道运行时内存的情况。比如mov ax,4这条指令占用多少个字节在编译时是确定的。

3.堆空间
就是一个大的内存块,需要的时候就申请分配,java中的对象都是在堆中非配的。但是堆空间的回收是比较麻烦的,所以JVM的回收算法都比较复杂。但是假如堆空间比较大,也就是内存没有面临用完的话,JVM一般不会启动垃圾回收器。这种情况下堆的效率和栈应该差不多,只是堆没有回收空间而已。假如要不时的启动GC的话,可以想象效率会极其低下。

4.静态存储区
声明为static的变量因为他们一直存在(整个程序运行过程中),所以他们被保存在一个静态存储区。

5.常量储存区
声明为final static的为常量,可以保存在常量储存区,还有String类型的对象都是常量,系统维护了一个String常量池。

6.其他存储
非RAM存储器,主要就是磁带,磁盘等等。

这里最要害的应该是栈和堆,栈应该是应用最广泛的,在汇编中函数调用的时候一般是这样的过程:
1.压栈(保护现场)
2.进入方式调用
3.出栈(恢复现场)
这里只是简朴的描述,上面的过程可能会有好多嵌套,不过大致过程就是这样,在其他语言其实也是相同的。





返回类别: 教程
上一教程: dbUnit对mssqlserver自增长主键的处理
下一教程: 调整JavaTM 的I/O性能(一)(zt)

您可以阅读与"浅谈Java中的存储空间类型"相关的教程:
· 复杂类型javabean(数组成员)在jsp中的运用:在jsp页面间传递数组
· Java程序员的存储过程
· Java Socket编程中的一个秘密类
· Java Socket编程中的一个秘密类
· Java中的浮点数分析
    微笑服务 优质保证 索取样品