乐趣区

关于java:java常量池与对象存储

一 数据存储地位

咱们先来谈谈数据的存储地位,有五个中央能够存储数据

(1) 寄存器:这是最快的存储区,因为它位于不同于其余存储区的中央 - 处理器外部。对于程序员来说是通明的不能间接管制,并且数量无限。

(2) 堆栈:位于通用 RAM(随机拜访存储器) 中,通过堆栈指针能够从处理器那里取得间接反对。堆栈指针若向下挪动,则调配新的内存;反之,则开释那些内存。java 的对象援用存储在堆栈中。

(3) 堆:一种沟通用的内存池 (也位于 RAM 区),用于寄存所有的 java 对象。堆不同于堆栈的益处是:编译器不须要晓得存储的数据在对立面存活多长时间。因而在堆中调配存储有很大的灵活性。当须要一个对象时,只须要 new 写一个简略的代码,当执行这个代码时,会主动在堆外面进行存储调配。

(4) 常量存储:常量值通常会放到程序代码外部,这样做的是平安的的,因为它永远不会被扭转。

(5) 非 RAM 存储:如果数据齐全存活于程序之外,那么他能够不受任何程序的管制,在程序没有运行时也能够存在。其中最根本的两个例子就是流对象和长久化对象。

二 java 内存区域

上图为 java 虚拟机运行时数据区。

(1) 程序计数器:线程公有的。能够看成是以后线程所执行字节码的行号指示器。在虚拟机的概念模型里,通过扭转这个程序计数器来选取下一条须要执行的字节码指令。

(2)java 虚拟机栈:线程公有的。虚拟机栈是 java 办法执行的内存模型:每个办法在执行的同时会创立一个栈帧用于 存储局部变量表、操作数栈、动静链接、办法进口等信息。每一个办法从调用到实现的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。局部变量表寄存了编译器可预知的各种个根本数据类型、对象援用个指向了一条字节码指令的地址。

(3) 本地办法栈:线程公有的。与虚拟机栈的作用相似,虚拟机栈为 java 办法提供服务,而本地办法栈则为虚拟机应用到的 NATIVE 办法服务。(什么是 Native Method? 就是一个 java 调用非 java 代码的接口。一个 Native Method 是这样一个 java 的办法:该办法的实现由非 java 语言实现.)

(4)java 堆:线程共享的。简直所有的 java 对象实例都在这里调配存储。java 堆是垃圾回收器治理的次要区域。

(5) 办法区:线程共享的。用于存储已被虚拟机加载的类信息、常量、动态变量、及时编译器编译后的代码等数据。办法区蕴含运行常量池,CLASS 文件除了有类的版本、字段、办法、接口等形容信息外,还有一项信息是常量池,用于寄存编译期生成的各种字面量和符号援用,这部分内容将在类加载后进入办法区运行时常量池中寄存。


退出移动版