Java中内存分配方式

摘自 Think in java

1、寄存器 这是最快的存储区,它位于处理器的内部,不能人为控制。

2、堆栈     位于RAM,但可以通过堆栈指针从处理器那里获取直接支持。堆栈指针向下移动,就分配新的内存,向上移动,则释放那些内存。这种方式分配内存快速有效,仅次于寄存器。

所以java必须知道存储在堆栈内所有对象的确切生命周期。对象引用 和 基本数据类型会放到堆栈中。

3、堆         一种通过的内存池,也位于RAM。用于存放所有的java对象。堆和堆栈的区别就在于编译器不需要知道数据在堆中存活的时间,但这使得存储分配和清理需要更多的时间。

4、常量存储  常量值通常可以直接放在程序代码内部,这样是安全的。有时,在嵌入式系统中,常量本身会放到ROM(只读存储器中)。

5、非RAM存储  数据可以完全存活与程序之外。基本的例子就是流对象和持久化对象。 其中基于RAM的对象,Java提供了对轻量级持久化的支持,JDBC和Hibernate提供了更加复杂的对在数据库中的对象信息的支持。

时间: 2024-10-25 06:52:40

Java中内存分配方式的相关文章

java中内存分配策略及堆和栈的比较

2.1 内存分配策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区

C中内存分配方式[转载]

在C 中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 一.简介: 1.栈,就是那些由编译器在需要的时候分配,在无需的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程式去控制,一般一个new就要对应一个delete.假如程式员没有释放掉,那么在程式结束后,操作系统会自动回收. 3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,但是他是用free来

Java中内存分配

划分为5个内存空间: 堆    存储new出来的对象, 特点:每个new出来的东西都有地址值,一般为16进制的值: 每个变量都有默认值: 使用完毕就变成了垃圾,但没有立即回收,会在垃圾回收期空闲时回收 栈    存储局部变量,特点:用完就释放 方法区 本地方法区    与系统相关 寄存器    给CPU使用

JAVA虚拟机内存分配与回收机制

Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等,还具有相应的指令系统. Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存

C和C++内存分配方式记录

C. C++中内存分配方式可以分为三种: (1)从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快.不容易出错,因为有系统会善后.例如全局变量,static变量等. (2)在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3)从堆上分配:即动态内存分配.程序在运行的时候用malloc 或new申请任意大小的内存,程序员自己负责在

程序在内存中的分配方式

1 桟区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值,其操作方式类似于数据结构中的栈. 若申请的内存小于系统所剩内存则成功,否则就会发生栈溢出错误. 栈的增长方向是向下的,通常栈的初始化指针指向内存的最高地址,它是连续的.系统自动分配,因此速度很快. 在函数调用时,第一个进栈的是主函数的下一条指令的地址,然后是各个函数的参数,参数从右向左进栈,然后是函数中的局部变量.静态变量是不入栈的. 2 堆区(heap):一般有程序员分配和释放,若不释放,最后由操作系统回收. 它与

Java中内存空间的分配及回收

Java中内存分为: 栈:存放简单数据类型变量(值和变量名都存在栈中),存放引用数据类型的变量名以及它所指向的实例的首地址. 堆:存放引用数据类型的实例. Java的垃圾回收: 由一个后台线程GC(Garbage Collection)进行垃圾回收,虚拟机判定内存不够的时候会中断代码的运行,这个时候GC才进行垃圾回收. 缺点:不能够精确的去回收内存. java.lang.System.gc(); 上面代码会建议系统回收内存,但系统不一定回应,会先去看内存是否够用,够用则不予理睬,不够用才会去进行

内存分配方式及内存碎片

什么是内存碎片? 内部碎片的产生:因为所有的内存分配必须起始于可被 4.8 或 16 整除(视 处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户.假设当某个客户请求一个 43 字节的内存块时,因为没有适合大小的内存,所以它可能会获得 44字节.48字节等稍大一点的字节,因此由所需大小四舍五入而产生的多余空间就叫内部碎片.外部碎片的产生: 频繁的分配与回收物理页面会导致大量的.连续且小的页面块夹杂在已分配的页面中间,就会产生外部碎片.假 设

C语言中内存分配

C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别. 第2节主要介绍C语言中内存分配及释放函数.函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项. 3.1 内存管理基本概念 3.1.1 C程序内存分配 1