关于Java中对象的存储

在文章开始要首先感谢《Java编程思想》这本书的作者,本文章也是本人针对该书内容的总结,只求作为个人总结,也希望能对一些刚刚接触Java的新手提供一些帮助,高手勿喷。


首先我们知道,Java是面向对象的编程思想,什么是对象? 有句话叫做 “万物皆对象”,至于面向对象有什么好处,我个人认为只是一种思考方式,面向对象想的很广,不在意细节,面向过程想的细。举个例子:你要建一座高楼,你要想到,肯定要用到 梁,柱子,楼梯等等这些东西,这些东西每一个都是对象,通过某种设计(算法)组合起来就搭建出了高楼(也就是我们的程序),但我们也要想到柱子肯定有不同,柱子的大小,材质,形状等等,这些东西都封装到柱子这个对象内部。所以我觉得用一个不是很严谨的说法就是,在每个对象内部用面向过程的方法详细介绍这个对象的种种细节,而许多个对象一起配合就组成了我们面向对象的思想。我们生活的世界,其实就是面向对象的思想,比如我们去吃面,我们去餐馆点面条,吃完付钱。餐馆,面条,钱等等都是对象,每个都有各自的方法,属性,我们只需要吃面,不要考虑面条怎么做出来的。至于面条是如何一步一步的做出来的,那是厨师采用面向过程的方法,这是他该干的事,只要他把面条交给我们就好了。

上面说了这么多只是为了说明,到底什么是面向对象,以及对象的含义。我们继续说对象是如何存储的。

尽管一切东西都是对象,但我们并不是直接操作对象的,而是操作对象的一个引用,可以想象对象是电视机,我们的引用就是遥控器。

例:String s;

上面这句话,就是创建了一个引用,并不是对象噢。如果这个时候你对 s 进行操控,会产生错误的,因为他只是一个引用,里面啥也没有,就像拿着一个没有电视机的遥控器,啥用也没有。

我们可以通过 String s=“abc”;或 String s=new String(“abc”);  作者推荐第二种方法通过new操作,虽然,第一种方法Java对于字符串也是支持的,但是,还是第二种方法更通用,也更标准。

下面就是重点了,我们要操作存储在内存中的数据,那么我们就要知道,这个对象在内存中是如何保存的呢。

首先内存中有5个地方存储数据:1>寄存器 2>堆栈 3>堆 4>常量存储 5>非RAM存储 ,我们一个个介绍。

1》寄存器                                                                             

位置:处理器内部                                                               

特点:这是速度最快的存储区。                                       

缺点:数量有限,程序员无法直接控制        

                   

2》堆栈  ----------对象引用的存储位置,

位置:通用RAM(随机访问存储器)

特点:通过堆栈指针可以直接操控,指针向下移动,分配新内存,向上,释放那些内存。速度仅次于寄存器。

缺点:创建程序的时候,Java系统要知道堆栈中所有项的生命周期,限制了程序的灵活性。


3》堆 -------------Java对象就存储在这里面。                                                           

位置:一种通用的内存池(也位于RAM区)                   

特点:存储所有的Java对象,由于不用知道数据的       

存活时间,所以灵活性非常高。

缺点:这种方式,是以牺牲效率为代价的,                   

其速度比起堆栈来说要差很多。                                         

注:在堆中的基础元素是 块,大的对象可能直接          

占用一个块,小的对象可能和其他对象一起

存储到一个块中。


4》常量存储:              ------------常量(final) 

位置:程序代码内部

特点:对于某些你不希望改变的对象,当设置为常量时,它就永远不会被改变了


5》非RAM存储              -------------存活于程序之外的数据,例:字节流,磁盘中的文件

位置:程序之外

特点:不受程序的控制,程序不在时依然可以存在,当需要转换为常规的对象时,也可以恢复成基于RAM的对象


特别注意:

1.对于我们经常用到的9种基本类型: boolean,char,byte,short,int,long,double,float,void ,由于他们特别小,很简单,如: String s=“abc” 这些变量是直接存在堆栈中的,因为这样更高效。

2.由于,所有对象都是建立在堆上的,但在堆上分配空间的方式,是非常昂贵的,但我们的Java语言,速度却并不是很慢,这其中,其实是垃圾回收器提高了对象的创建速度。


垃圾回收器是一个非常重要也是面试时经常会问到的问题,下一篇文章将介绍 垃圾回收机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值