Java 数据存储

JAVA在程序运行时,在内存中划分5片空间进行数据的存储,分别是:

寄存器register

最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制

  • 最快的存储区(由编译器根据需求分配,无法从程序中控制)
  • 位于处理器内部
  • 数量有限

常量存储constant storage

存放字符串常量和基本类型常量(public static final)

  • 常量值通常直接存放在程序代码内部
  • 有时在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中 (ROM,Read Only Memory,只读内存。一种只能读出事先所存数据的固态半导体存储器,它相当于PC机上的硬盘,用来存储和保存数据。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM就不会。)

静态存储区static storage

存放静态成员(static定义的)包括静态成员变量和静态成员方法(类方法)
  • 静态是指“在固定的位置”
  • 静态存储里存放程序运行时一直存在的数据
  • 可用关键字static来标识一个对象的特定元素是静态的
  • 但JAVA对象本身从来不会存放在静态存储空间里

重点注意:

  1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
  2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。
  3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

栈stack

    存放基本类型的变量数据和对象,数组的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)

  • 速度仅次于寄存器
  • 通过它的“栈指针”从处理器获得支持;
  • 栈指针向下移动,分配新内存;向上,释放内存;
  • 这一约束限制了程序的灵活性:创建程序时,JAVA编译器必须知道存储在栈内所有数据的确切大小和生命周期,生成相应代码,以便上下移动栈指针;因此某些JAVA数据存储在栈中,而JAVA对象不存储在其中,位于通用RAM中 (RAM,random access memory随机存取存储器),与CPU直接交换数据的内部存储器,也叫主存(内存)。随时读写,速度很快,通常作为临时数据存储媒介)

特点

函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配。

栈内存特点,数数据一执行完毕,变量会立即释放,节约内存空间。

栈内存中的数据,没有默认初始化值,需要手动设置。

堆heap

    存放所有new出来的对象

  • 位于通用RAM中,用来存放所有的JAVA对象
  • 不同于栈的好处:不需要知道存储数据分配多少区域以及生命周期,有很大的灵活性
  • 需要创建一个对象时,只需new一行代码,执行这行代码,会自动在堆里进行存储分配
  • 为这种灵活性付出相应代码,用堆进行存储分配比用栈进行存储需要更多的时间

特点

堆内存用来存放new创建的对象和数组。
堆内存中所有的实体都有内存地址值。
堆内存中的实体是用来封装数据的,这些数据都有默认初始化值。
堆内存中的实体不再被指向时,JVM启动垃圾回收机制,自动清除,这也是JAVA优于C++的表现之一(C++中需要程序员手动清除)。

注:

什么是局部变量:定义在函数中的变量、定义在函数中的参数上的变量、定义在for循环内部的变量

原文地址:https://www.cnblogs.com/lucky1024/p/11038930.html

时间: 2024-08-29 13:20:25

Java 数据存储的相关文章

Java程序运行时数据存储位置

寄存器: 这是最快的存储区, 但是寄存器的数量极其有限, 所以寄存器根据需求进行分配, 而且不能直接控制. 堆栈: 位于通用的RAM(随机访问存储器), Java系统必须知道存储在堆栈内所有项的确切生命周期, 以便上下移动堆栈指针. 这一约束限制了程序的灵活性,所以虽然某些Java数据存储于堆栈中, 特别是对象的引用, 但是Java对象并不存储于其中. 堆: 一种通用的内存池(也位于RAM区), 用于存放所有的Java对象. 堆不同于堆栈的好处是编译器不需要知道存储的数据在堆里存活多久. 常量存

关于JAVA数据储存

关于JAVA数据储存: 在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register) 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. 2. 堆栈(stack) 位于通用RAM中,但通过它的"堆栈指针"可以从处理器哪里获得支持.堆栈指针若向下移动,则分配新的内存:若向上移动,则释放那些内存.这是一种快速有效的分配存储方法,仅次于寄存

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

Java基础知识强化之IO流笔记45:IO流练习之 把文本文件中数据存储到集合中的案例

1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据源是一个文本文件.      目的地是一个集合.      而且元素是字符串.      数据源:   b.txt -- FileReader -- BufferedReader  目的地:  ArrayList<String> 2. 代码示例: 1 package cn.itcast_02; 2

Java的运行时数据存储机制

原文地址:http://yanwushu.sinaapp.com/java_data_storage/ Java程序在运行时需要为一系列的值或者对象分配内存,这些值都存在什么地方?用什么样的数据结构存储?这些数据结构有什么特点?本文试图说明此命题的皮毛之皮毛. 概念 对于Java,有六个不同的.用于数据存储的概念,他们是: 1.     寄存器( register),是最快的存储区,位于处理器内部.因为寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.程序员无法使用Java代码使用寄存器

Java基础知识强化之IO流笔记45:IO流练习之 把集合中的数据存储到文本文件案例

1. 把集合中的数据存储到文本文件案例:    需求:把ArrayList集合中的字符串数据存储到文本文件 ? (1)分析:通过题目的意思我们可以知道如下的一些内容,ArrayList集合里存储的是字符串.遍历ArrayList集合,把数据获取到.然后存储到文本文件中.文本文件说明使用字符流. (2) 数据源: ArrayList<String> -- 遍历得到每一个字符串数据 目的地: a.txt -- FileWriter -- BufferedWriter 2. 代码示例: 1 pack

JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder

JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringBuffer概述 关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点: StringBuffer是一个容器 可以字节操作多个数据类型 最终会通过toString方法变成字符串 存储 S

java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch:5.2.0 4.Linux 5.Python 6.maven 二.maven坐标: <!--java连接ulinix脚本架包--> <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>

我的全栈之路-Java基础之数据存储

我的全栈之路-Java基础之数据存储 我的全栈之路 2.1 标识符 标识符是在程序开发时给包,类.接口.注解,变量,方法命名的字符序列. 标识符在命名时需要遵守相关的规则和规范: 标识符的命名规则: 标识符不能是Java的关键字和保留字,关键字是Java中被赋予赋予特殊含义的单词,例如public static void等等.保留字是现有Java版本尚未使用,但是未来的Java版本可能会做关键字使用的单词,例如goto,const.但是可以包含关键字,保留字. 标识符可以由字母.数字.下划线组成