浅谈Java 中的堆和栈
来源:互联网 发布:java中的集合框架 编辑:程序博客网 时间:2024/05/20 11:52
Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存。
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方,,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
栈(stack)是操作系统在建立某个进程或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性。
特点:存取速度比堆要快,仅次于直接位于CPU中的寄存器。
栈内存的一个特点是数据共享,这样设计是为了减小内存消耗,如果常量在栈内存中,就将变量指向该常量,如果没有就在该栈内存增加一个该常量,并将变量指向该
缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
存放对象:①一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象地址②方法的形参 直接在栈空间分配,当方法调用完成后从栈空间回收。
①方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。
②局部变量声明出来之后,在栈控件和堆空间中分配空间,当局部变量生命周期结束后,它的栈空间立刻被回收,它的堆空间等待GC回收。
堆:
Java应用都唯一对应一个JVM实例,每一个JVM实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或者数组都放在这个堆中,并由应用所有的线程共享。Java中分配堆内存是自动初始化的,Java中所有对象的存储空间都是在堆中分配的,但这些对象的引用则是在栈中分配,也就是一般在建立一个对象时,堆和栈都会分配内存。
特点:可以动态地分配内存大小、比较灵活,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
缺点:由于要在运行时动态分配内存,存取速度较慢。
主要存放:①由new创建的对象和数组 ;②this
特殊:引用数据类型(需要用new来创建),既在栈控件分配一个地址空间,又在堆空间分配对象的类变量。
RAM数据存放位置:
寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。不能操作
栈(stack):栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内 存。这是一种快速有效的分配存储方法,仅次于寄存器。不能操作
堆(heap):用于存放所有的引用空间和内容。堆不同于堆栈的好处是:编译器 不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。
静态存储(static storage):静态存储里存放程序运行时一直存在的数据。
常量存储(constant storage):常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。存放在rom
非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
注:每个线程包含自己的一个栈区,栈中只保存基本数据类型和自定义对象的引用。
每个栈中的数据(基本类型和对象引用)都是私有的,其他栈不可访问。
栈 = 基本类型变量区 +引用类型变量区 + 操作指令区(存放操作指令)
- 浅谈java内存中的堆和栈
- 浅谈Java 中的堆和栈
- 浅谈Java中的栈和堆
- 浅谈java中的堆内存和栈内存
- 浅谈Java堆和栈
- Java基础-浅谈堆和栈
- 浅谈java中栈和堆
- 浅谈堆和栈
- java中的栈和堆
- Java中的堆和栈
- Java中的堆和栈
- java中的栈和堆
- java中的堆和栈
- Java 中的堆和栈
- Java 中的堆和栈
- Java中的堆和栈
- Java中的堆和栈
- Java 中的堆和栈
- USACO2013FebruaryGold partition
- Autolayout_APP适配终结者
- C#之WinForm基础 获得窗体实时的供控件使用的宽与高(窗体变,数也变)
- poj2299(归并排序求逆序对)
- jQuery 取值、赋值的基本方法整理
- 浅谈Java 中的堆和栈
- Thread & ExecutorService & ThreadPoolExecutor 总览
- JQ知识点1
- android源码大放送(实战开发必备)
- 击鼓传花(赛码网)
- Linux下Nginx的安装
- 策略模式
- JQ知识点2
- 韩国仁川机场乐天免税店买买买!