在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.出栈(恢复现场)这里只是简单的描述,上面的过程可能会有好多嵌套,不过大致过程就是这样,在其他语言其实也是一样的。

java 存储空间_Java中的存储空间类型相关推荐

  1. java 枚举_Java中的枚举类型(Enum)详解

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  2. java不可变类型_Java中的值类型:为什么它们不可变?

    java不可变类型 值类型不必是不变的. 但是他们是. 在上一篇文章中,我讨论了Java中指针与引用之间的区别以及如何传递方法参数(按值传递或按引用传递). 这些与Java中尚不存在的值类型密切相关( ...

  3. java 继承示例_Java中的继承类型以及示例

    java 继承示例 Prerequisite: Inheritance and its implementation in Java 先决条件: 继承及其在Java中的实现 Java中的继承类型 (T ...

  4. java 7种枚举类型_Java中的枚举类型

    枚举类比较用 == 还是 equals,有啥区别? java 枚举值比较用 == 和 equals 方法没啥区别,两个随便用都是一样的效果.因为枚举 Enum 类的 equals 方法默认实现就是通过 ...

  5. java 鸭子类_Java中实现鸭子类型机制

    "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子."[引用维基] 一般而言,鸭子类型机制常见/用于动态语言,如Python.Ruby.JS.来 ...

  6. java中的string类型_Java中的字符串类型(String)

    String 字符串是一个引用数据类型,字符串都是对象. String特性:1.在程序中出现的字符串字面量(常量),在程序中运行时会以对象的形式保存在JVM内存的字符串池中,并且所有的这些字符串字面量 ...

  7. java 类型转换_java中的基本数据类型的转换

    本文参考了如下两篇文章: Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码 ...

  8. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  9. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

最新文章

  1. java中showconfirmdialog_Java小游戏之连连看
  2. TransDecoder
  3. oracle 禁用外键
  4. [ios]NSLock锁
  5. linux该专接本还是工作_工作还是考研,我究竟该怎么选?
  6. 倒计时2天,WebRTCon 2018有哪些有趣有料分享与活动?
  7. 四维偏序 CDQ套CDQ
  8. ASP.Net Core 2.0中的Razor Page不是WebForm
  9. 深入JVM——OOM异常解析
  10. left join 索引失效无条件_从零开始学数据分析-mysql索引优化方案
  11. python全栈学习--django基础入门
  12. THREEJS - 模型的裁切消隐
  13. 电脑有电流声怎么解决_为什么音箱有电流声?电脑音箱电流声怎么消除
  14. 写给电脑小白的电脑科普
  15. java整人代码大全_给大家分享个整人代码。很实用
  16. mysql正则mybatis中用法_SQL 正则表达式及mybatis中使用正则表达式
  17. 【PPT】极简PPT设计方法
  18. 计算机机房需要装排烟风机不,送风机房和排烟机房的作用分别是什么
  19. (附源码)ssm自助游服务系统 毕业设计 250858
  20. wps在Linux上使用命令打开文档的方法

热门文章

  1. ACM1598并查集方法
  2. C# java 有关“字节序”的描述 .
  3. 使用Remoting技术
  4. 动态条形图(RunBargraph)用于数据展示
  5. 小数转换成二进制c语言,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...
  6. 超导量子计算机速度多快,我国量子计算机实现量子霸权,计算速度比谷歌快了100亿倍...
  7. niceyoo的2020年终总结-2021年Flag
  8. Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航
  9. js将字符串 YYMMDDHHmmss 转化为 date类型
  10. div中图片下方有边距