原文地址:http://yanwushu.sinaapp.com/java_data_storage/

Java程序在执行时须要为一系列的值或者对象分配内存,这些值都存在什么地方?用什么样的数据结构存储?这些数据结构有什么特点?本文试图说明此命题的皮毛之皮毛。

概念


对于Java,有六个不同的、用于数据存储的概念。他们是:

1.     寄存器( register),是最快的存储区。位于处理器内部。由于寄存器的数量极其有限,所以寄存器由编译器依据需求进行分配。程序猿无法使用Java代码使用寄存器中的存储空间。或者说:在Java开发的层面上。寄存器的操作已经被封装。

2.     栈( stack),位于通用 RAM。

存取速度快,仅次于寄存器。栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。

创建程序时候, JAVA 编译器必须知道存储在栈内全部数据的确切大小和生命周期,由于它必须生成对应的代码,以便上下移动栈指针,进而分配和释放内存。由于栈的这样的存储特性,所以某些数据存在栈中,比方对象引用和基础类型的变量值。可是有些数据是不适合存到栈中的。比方对象的实例。

3.     堆( heap)。一个执行时数据区,位于 RAM。堆中的空间是动态分配的,所以,不须要知道数据的大小和生命周期。因此,在堆里存储数据有非常大的灵活性。

Java对象的实例和数组放在这里。堆中的过期对象由GC负责回收。

堆的存取速度较慢。

4.     静态存储( static storage),RAM中一片固定的位置。存储静态数据,这些数据在程序中用statickeyword修饰。

5.     常量存储( constant storage),常量值通常直接存放在程序代码内部,这样做是安全的,由于它们永远不会被改变。

6.     非 RAM存储。

假设数据全然存活于程序之外,那么它能够不受程序的不论什么控制,在程序没有执行时也能够存在。

栈和静态存储的数据共享


用一个案例理解。如果定义:

int a = 3;

int b = 3 ;

编译器先处理 int a = 3 ;首先它会在栈中创建一个变量为a 的引用,然后查找栈中是否有 3 这个值。假设没找到,就将3 存放进来,然后将 a 指向 3 。接着处理 int b = 3 ;在创建完 b 的引用变量后,由于在栈中已经有 3 这个值,便将 b 直接指向 3 。这样,就出现了 a 与 b 同一时候均指向 3 的情况。这时,假设再令 a=4 ;那么编译器会又一次搜索栈中是否有 4 值,假设没有,则将
4 存放进来。并令 a 指向 4 ;假设已经有了。则直接将 a 指向这个地址。因此 a 值的改变不会影响到 b 的值。要注意这样的数据的共享与两个对象的引用同一时候指向一个对象的这样的共享是不同的。由于这样的情况 a 的改动并不会影响到 b, 它是由编译器完毕的,它有利于节省空间。而一个对象引用变量改动了这个对象的内部状态,会影响到还有一个对象引用变量。

数它共享相同的静态数据。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Java数据存储机制的实现的更多相关文章

  1. 关于javascript数据存储机制的一个案例。

    之前在学习js的结合性的时候,我有点不太明白,在网上找到一个比较经典的C语言优先级结合性的案例,就是下边这一个.本想在js之中测试一番,结果竟然发现得出的结果和网上的不一样,这令我百思不得其解,后经高 ...

  2. java中存储机制堆栈。

    一.java的六种存储地址及解释 1) 寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不 ...

  3. 【Java编程思想阅读笔记】Java数据存储位置

    Java数据存储位置 P46页有感 一.前置知识 栈是由系统自动分配的,Java程序员对栈没有直接的操作权限, 堆是所有线程共享的内存区域,栈 是每个线程独享的. 堆是由程序员自己申请的,在使用new ...

  4. Java的运行时数据存储机制

    原文地址:http://yanwushu.sinaapp.com/java_data_storage/ Java程序在运行时需要为一系列的值或者对象分配内存,这些值都存在什么地方?用什么样的数据结构存 ...

  5. 1、安卓数据存储机制——sharedPreference

    项目中用到的数据存储方式: 1.这个项目里的“个人标签“.”个性签名“页面的文字存储——sharedPreference:我们项目中用到的Preference来保存用户编辑的标签.签名内容,并支持用户 ...

  6. JS中浏览器的数据存储机制

    一.JS中的三种数据存储方式 cookie.sessionStorage.localStorage 二.cookie 1.cookie的定义: cookie是存储在浏览器上的一小段数据,用来记录某些当 ...

  7. Java 数组存储机制

    数组是一种引用类型. 数组用来存储类型相同的一组数据,一旦初始化完成,其所占的空间也确定下来了,即使清除某个元素,其所占用的空间仍然存在,即,数组的长度不能被改变,且数组只有在分配空间后才能使用. 数 ...

  8. java 数据存储

    简单的记录一下而已. 1.寄存器: 特点:快,存储有限. 存储地点:处理器内部. 2.堆栈 特点:仅次于寄存器快,通过堆栈指针在处理器获取支持.堆栈指针下移,分配内存,上移,释放内存.此外须知生命周期 ...

  9. HTML5客户端数据存储机制Web Storage和Web SQL Database

    引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...

随机推荐

  1. 【2005】N只猴子选大王

    Time Limit: 3 second Memory Limit: 2 MB N只猴子选大王.选举办法如下:从头到尾1.2.3报数,凡报3的退出,余下的从尾到头1.2.3报数,凡报3退出:余下的又从 ...

  2. 【57.14%】【codeforces 722B】Verse Pattern

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. js课程 1-5 js如何测试变量的数据类型

    js课程 1-5 js如何测试变量的数据类型 一.总结 一句话总结:用typeof()方法. 1.js如何判断变量的数据类型? 用typeof()方法. 13 v=10; 14 15 if(typeo ...

  4. JNDI 的理解

    JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用 ...

  5. 在nginx中使用lua直接訪问mysql和memcaced达到数据接口的统一

    安装nginx參见<nginx+lua+redis构建高并发应用> 让nginx 中的nginx_lua_module支持mysql 和memcache 下载 https://github ...

  6. Java冒泡排序与直接选择排序代码随笔

    冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...

  7. 让Duilib多线程编程更easy

    一.Duilib不能开发多线程程序? 记得非常久曾经就听有人说过Duilib的多线程支持性不好,原因是Duilib里面的控件是用数组管理的全局变量,不能进行多线程訪问,加锁非常麻烦.事实上这个说法是非 ...

  8. word 论文排版 —— 按指定格式章节的自动编号

    在word中如何实现章节标题自动编号 标题样式与标题的编号是两个步骤,为标题建立编号是在为标题样式确定的基础后进行的.这是显而易见的,也即只有先定义了多级标题(也可使用 word 自带的标题样式),才 ...

  9. Delphi绘图相关对象(TCanvas对象的方法)

    TCanvas对象的方法 方法 说明 Arc Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer); Arc方法在椭圆上画一段弧,椭圆由(x1,y1).(x2,y2) 两点所确 ...

  10. Linux 网络编程——TCP

    环境:Linux  C   一.协议介绍      TCP是面向连接的协议,提供可靠的数据传输:TCP协议的可靠传输基于三次握手.四次挥手以及确认重传机制实现.下面来具体展示下TCP的三次握手.四次挥 ...