Java程序运行的内存分配
2015-04-10 21:43
197 查看
Java的内存分配
A:栈 存储局部变量
B:堆 存储所有new出来的
C:方法区(程序代码及方法相关)
D:本地方法区(系统相关)
E:寄存器(CPU使用)
注意:
a:局部变量 在方法定义中或者方法声明上定义的变量。
b:栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的东西,且都有地址
每一个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u0000'
boolean false
引用类型 null
数据使用完毕后,在垃圾回收器空闲的时候回收。
栈与堆的具体区别
堆和栈都是内存上的一快空间,
只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.由无需程序员管理,使用即可。
堆就象一块空地,可以随便放,和随便取.由程序员管理,用时申请,不用时要求手动释放(否则可能发生内存溢出)。
另外,栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取。
A:栈 存储局部变量
B:堆 存储所有new出来的
C:方法区(程序代码及方法相关)
D:本地方法区(系统相关)
E:寄存器(CPU使用)
注意:
a:局部变量 在方法定义中或者方法声明上定义的变量。
b:栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的东西,且都有地址
每一个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u0000'
boolean false
引用类型 null
数据使用完毕后,在垃圾回收器空闲的时候回收。
栈与堆的具体区别
堆和栈都是内存上的一快空间,
只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.由无需程序员管理,使用即可。
堆就象一块空地,可以随便放,和随便取.由程序员管理,用时申请,不用时要求手动释放(否则可能发生内存溢出)。
另外,栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取。
栈区内存,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。访问顺序遵循先进后出原则。 栈stack:是程序启动时候由程序留出的工作内存区 比如程序的局部变量,函数调用等都是从栈中获取,这个内存在需要的时候分配,不需要就释放,由程序编译时确定栈区空间大小。
堆heap:是计算机空余的物理内存和硬盘空余空间的和。但是它的获取不是自动的了,相比从栈中分配内存要慢些。 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。堆区空间是应用程序在运行的时候请求操作系统分配给自己内存。
相关文章推荐
- Java编程思想读书笔记——java程序运行时,内存分配
- Java--程序运行中的内存分配
- Java 运行外部程序。
- Java程序运行工作原理
- 运行Java程序
- 控制一个 Java 程序运行生命周期结束前不能再次被执行
- 亲密接触Java手机程序设计(一):认识手机程序运行环境――J2ME平台
- 在自己的java代码中编译并运行程序
- 双击运行JAVA程序
- Linux中设定让Firefox可以运行Java程序,然后老爸就可以在家与“小白”决象棋了!
- Swing 写的客户端程序在java web start 运行,多语言过程中,JOptionPane.showMessageDialog() 按钮多语言问题
- 在java程序中执行dos命令或运行其他程序
- Java程序作为服务程序运行
- 影响Java程序运行的几个问题
- 在 Eclipse 中运行带参数的 Java 程序
- 在 console(控制台)下编译和运行 Java 程序
- Windows平台下简单运行Java程序的方法
- java程序获得windows系统的一些参数(cmd指令运行返回结果)
- 从简单程序看java运行错误
- 如何在Java程序中运行外部类文件