码迷,mamicode.com
首页 > 编程语言 > 详细

Java程序运行的内存分配

时间:2015-04-10 22:23:31      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

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
数据使用完毕后,在垃圾回收器空闲的时候回收。

 

栈与堆的具体区别

堆和栈都是内存上的一快空间,
只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.由无需程序员管理,使用即可。
堆就象一块空地,可以随便放,和随便取.由程序员管理,用时申请,不用时要求手动释放(否则可能发生内存溢出)。
另外,栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取。
栈区内存,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。访问顺序遵循先进后出原则。 栈stack:是程序启动时候由程序留出的工作内存区  比如程序的局部变量,函数调用等都是从栈中获取,这个内存在需要的时候分配,不需要就释放,由程序编译时确定栈区空间大小。 
堆heap:是计算机空余的物理内存和硬盘空余空间的和。但是它的获取不是自动的了,相比从栈中分配内存要慢些。 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。堆区空间是应用程序在运行的时候请求操作系统分配给自己内存。

Java程序运行的内存分配

标签:

原文地址:http://www.cnblogs.com/shysky77/p/4415741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!