JAVA数据结构存储剖析

上传人:m**** 文档编号:168800365 上传时间:2022-11-12 格式:DOCX 页数:4 大小:13.67KB
收藏 版权申诉 举报 下载
JAVA数据结构存储剖析_第1页
第1页 / 共4页
JAVA数据结构存储剖析_第2页
第2页 / 共4页
JAVA数据结构存储剖析_第3页
第3页 / 共4页
资源描述:

《JAVA数据结构存储剖析》由会员分享,可在线阅读,更多相关《JAVA数据结构存储剖析(4页珍藏版)》请在装配图网上搜索。

1、JAVA 数据结构存储剖析实用举例:1:堆栈(st ack)方法的参数值public void sun (int a , int b) /调用方法是在栈内存中为参数分配存储空间,方法结束自动释放。 局部变量public static void main(String args) int a = 5; /在方法中的局部变量,存储在栈内存中,方法结束时候,释放内存 引用变量Person p = new Person(“zhaoyue”, 22); /调用构造方法的时候,“形参”先在堆栈中开辟内存,存放“实参”,再把“实参”的 /一份拷贝传入对象之中。此时,“实参”的拷贝存放在堆(heap)中,构造

2、方法结束, /堆栈中的内存释放。堆栈的存储要领:压栈,出栈,自动清除!2:堆(heap)成员变量public class Person String name; int age; / New 的时候存储在堆中。new 得到的对象Person p = new Person(“ zhaoyue” , 22);/ New 的时候存储在堆中。3:数据区(Data segmen t)3.1:静态存储(static storage) 静态变量public static int a = 5;/JVM 运行时首先为其开辟空间,位置不变,程序运行结束时空间释放。并且在运行时 只加载一次。静态方法public s

3、tatic void run() print ( “hello”) ; /JVM 运行时首先为其开辟空间,位置不变,程序运行结束时空间释放。并且在运行时 只加载一次。3.2 地址池(address pool)非 new 的字符串String s = “hello world”;3.3 常量存储( constant storage )常量public final int a = 5;4: Code segment(代码区)4.1:Code segment存放代码4.2:方法区( method area)成员方法Public void run()System.out.println(“Im run

4、!”); /类装载的时候存储在方法区,初始时被隐藏,实例化对象时被激活。具体解释:在 java 中有 6 中存取机制:1:寄存器(regis ter)2:堆栈(stack)3: 堆(heap)4:静态存储(static storage)5:常量存储(cons tant st orage)6:非RAM存储1寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方一一处理 器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接 控制,也不能在程序中感觉到寄存器存在的任何迹象。2堆栈(stack):位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪

5、里获得支持。 堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效 的分配存储方法,仅次于寄存器。创建程序时候, JAVA 编译器必须知道存储在堆栈内所有 数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约 束限制了程序的灵活性,所以虽然某些JAVA数据存储在堆栈中特别是对象引用,但是 JAVA 对象不存储其中。3堆(heap): 一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象。堆不同 于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在 堆里存活多长时间。因此,在堆里分配存储有很大的灵活

6、性。当你需要创建一个对象的时候 只需要 new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为 这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时 间。4:静态存储(static storage):这里的“静态”是指“在固定的位置”。静态存储里存放 程序运行时一直存在的数据。你可用关键字 static 来标识一个对象的特定元素是静态的, 但 JAVA 对象本身从来不会存放在静态存储空间里。5:常量存储(constant storage):常量值通常直接存放在程序代码内部,这样做是安全的, 因为它们永远不会被改变。有时,在嵌入式系统中,常量本

7、身会和其他部分分割离开,所以 在这种情况下,可以选择将其放在 ROM 中6: 非 RAM 存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序 没有运行时也可以存在。速度:就速度来说,有如下关系:寄存器 堆栈 堆 其他关系:然后我主要要说下堆与堆栈的关系:堆:堆是heap,是所谓的动态内存,其中的内存在不需要时可以回收, 以分配给新的内存请求,其内存中的数据是无序的,即先分配的和随后分配的内 存并没有什么必然的位置关系,释放时也可以没有先后顺序。一般由使用者自由 分配,在 C 语言中 malloc 分配的就是堆,需要手动释放。堆栈:就是st ack。实际上是只有一个出入口的队

8、列,即后进先出(frist in , las tout ),先分配的内存必定后释放。一般由,由系统自动分配,存放函 数的参数值,局部变量等,自动清除。还有,堆是全局的,堆栈是每个函数进入的时候分一小块,函数返回的时候就释 放了,静态和全局变量, new 得到的变量,都放在堆中,局部变量放在堆栈中, 所以函数返回,局部变量就全没了。JAVA 中的基本类型,其实需要特殊对待。因为,在 JAVA 中,通过 new 创建的对象存储在“堆”中,所以用 new 创建一个小的、简单的变量,如基本 类型等,往往不是很有效。因此,在JAVA中,对于这些类型,采用了与C、C+ 相同的方法。也就是说,不用 new

9、来创建,而是创建一个并非是“引用”的“自 动”变量。这个变量拥有它的“值”,并置于堆栈中,因此更高效。再说一说类的实例方法!类的实例方法在内存中是只有一份,不过肯定不会是第一个对象中,如 果是第一个对象的话,那么当第一个对象被销毁的时候,那么后面的对象就永远 无法调用了。类的实例方法存在一个专门的区叫方法区(method area),事实上类刚 装载的时候就被装载好了,不过它们在睡眠,只是这些方法必须当有对象产生 的时候才会苏醒.(比如,一个输出类的成员变量的方法, 如果连对象都没有,何 来的输出成员变量).所以, 方法在装载的时候就有了,但是不可用,因为它没有指 象任何一个对象。而静态的又不

10、一样了,静态的东西存在静态存储(static storage)区, 他们和类是一个等级的,就是说只要类被装载,它们就可以直接用.(用类名来调 用).他们不依赖与任何对象, 所以也不能输出任何对象的成员属性.(除非成员属 性也是静态的).每个对象在new的时候都会在堆区中开辟内存,用来保存对象的属性和方 法. (实际上方法保存的只是方法区的引用,如果保存的是方法本身,那么试想一 下,有多少个对象就得有多少个方法,那么又和第一点中实例方法在内存中只 有一份拷贝相矛盾了。另外我补充一点,在父类的引用指向子类对象的时候, 父类可以调用子类从父类继承的属性和方法,子类覆写父类的属性和方法,在 动态绑定(也就是多态)时,子类对象有一个方法区得引用,动态 new 的时候 这个引用指向子类的方法,从而实现了父类可以调用子类覆写父类的方法。这 也是动态绑定得名的原因。)如果您认真看完这篇文章,估计java中内存方面肯定会有所帮助,这篇文 章是我总结归纳出来的,并非完全自己写的。有什么不对的地方,欢迎批评指 正。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!