Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区(static storage)、常量存储区(constant storage)以及非随机存取存储区(Non-RAM)。 1. 寄存器(register).寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用是由CPU按需进行分配.编程的时候我们没有必要去对它进行直接控制.并且在程序中也没办法找到到底什么时候使用了寄存器的依据. 2. 栈(stack).它位于随机存取存储器(RAM)中,并通过由CPU直接支持的栈指针(stack pointer)来进行操作.栈指针通过向下移动来分配新的存储空间,并通过向上移动来释放存储空间.这是仅次于寄存器的另一种高速有效地分配存储空间的方式.在创建程序期间,Java编译器必须知道存储在栈上的所有数据的准确大小和它们的生命周期.这样它才能够产生代码来让栈指针上下地移动.但这种约束限制了代码的灵活性,所以当某些Java存储区在栈上的时候——非凡是,对象引用(object reference)――而Java对象本身并不被存储在栈上. 3. 堆(heap).这是存储Java所有对象的内存池(同样在RAM区域中).堆的优点是,它不像栈一样,编译器并不需要知道它应该从堆中分配多大的存储空间,或者存储空间应该在堆上存在多久.因此,在堆上分配多大的存储空间具有很大的灵活性.无论你何时需要创建对象,你只需要简单的在代码中使用要害字new来创建它就行了.在这段代码被执行时候就在堆(heap)上面分配相应的存储空间.当然,为这样的灵活性也需要付出一定的代价:在堆上分配存储空间比在栈上分配存储空间要更加耗时(假如你能够在Java中像在C++一样,在stack上创建对象的话). 4. 静态存储区(static storage).”静态(static)”在这里表示”在一个固定的位置”(尽管它同样在RAM中).静态存储区包括:对于程序的整个运行期间都有效的数据.你能够使用要害字static来指定非凡的对象为静态的.但是Java对象自身却从来不放置在静态存储区中. 5. 常量存储区(constant storage).常量通常被直接放置在程序代码当中.这是安全的,因为它们永远不能被改变.在某些时候多个常量能够自己分隔开,这样在嵌入式系统中可以被任意地放置在只读存储器(ROM)中. 6. 非RAM存储区(non-RAM storage).假如数据完全存在于程序之外,在程序未被运行时数据也能存在,而不受程序的控制.对于此类情况,有两个主要的例子来说明:一,对象流(streamed objects),这种对象通常以字节流的形式被送到其他的机器去.二,持久化对象(persistent objects),这种对象存放在磁盘上,即便是程序中止以后它们仍然保持原有状态.这些存储器都是将对象以某种形式保存在其他的介质中,然后在需要的时候再把它恢复为常规的基于RAM的对象.Java提供了对轻量级持久性的支持.在未来的Java版本中,Java将提供更加完备的持久性的支持.
资料引用:http://www.knowsky.com/369274.html
分享到:
相关推荐
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
`java.lang`包包含了构成Java语言核心的一部分类和接口,如基本数据类型、`String`、`System`、`Thread`等。它是所有其他包的基础,并且默认对所有Java程序可见。例如: - **Basic Data Types**:提供了如`Integer`...
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
理解流的分类,如字节流和字符流,以及缓冲区、选择器在NIO中的作用,能够展示对数据传输和资源管理的理解。 4. **多线程**:Java提供了丰富的多线程支持,面试中会考察线程的创建、同步机制(synchronized、Lock)...
- **缓冲区**:缓冲区是NIO的核心组件,它是一种特殊类型的数组,用于存储各种基本数据类型的数据。Buffer提供了一种高效且可控的方式来读写数据,如get()和put()方法,以及position()、limit()和capacity()属性来...
集合框架是Java中存储和管理对象的工具,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现。了解它们的特点和使用场景,以及泛型和并发容器(如ConcurrentHashMap)的运用,能...
指令集部分为Java虚拟机中的指令分类,并简述了它们的用途,例如加载和存储指令、算术指令、类型转换指令、对象创建与操纵指令、操作数栈管理指令、控制转移指令、方法调用与返回指令以及异常处理指令等。...
在"bit_java_class-java_se-master"这个目录结构中,我们可以推测这是一个关于JavaSE的课程或者项目实践的资源集合。下面我们将深入探讨JavaSE中的关键知识点: 1. **基础语法**:Java的语法与C++相似,但更加强调...
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...
"java外包笔试F卷.docx"的难度相对较高,可能是为中高级程序员准备的,可能涵盖以下进阶知识点: 1. **JVM内存模型**:理解堆、栈、方法区、本地方法栈等区域的划分及其作用。 2. **垃圾回收机制**:包括垃圾收集...
学习如何有效地使用它们来存储和操作数据是Java开发中的常见任务。 5. **IO流**:输入/输出流是Java处理数据传输的关键,包括文件操作、网络通信等。理解流的分类(字节流和字符流)、缓冲区的概念,以及如何使用...
了解流的分类(字节流和字符流、输入流和输出流),以及缓冲区、转换流、对象流等高级特性,是处理数据交换问题的关键。 7. **网络编程**:Java提供了Socket编程接口,可以用于创建客户端和服务器端的应用。理解TCP...
书中详细解释了文件操作、流的概念、缓冲区的使用,以及NIO 2.0引入的Path、Files和Channels等新特性。 4. **网络编程**:Java提供了丰富的API用于网络通信,包括Socket和ServerSocket,以及HTTP、FTP等协议的实现...
5. 类加载机制:JVM通过类加载器(ClassLoader)将Java类的.class字节码文件加载到运行时数据区的方法区中,然后为类的静态变量分配内存,并在Java堆中创建类的实例对象。类加载机制是实现Java动态加载和运行时多态...
在"(五)异常和内部类.pdf"中,你将学习到Java的异常处理机制,包括try-catch-finally语句块、异常的分类(检查异常和运行时异常)以及如何自定义异常。此外,内部类是Java的一个独特特性,它允许在一个类的内部定义...