A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-22 00:58 编辑

   C++中可以直接使用默认构造函数,new出一个类数组,如。 Object *pOb= new Object[5];返回的是五个连续Object类数组第一个字节的指针地址。
而在java中。Object[] arrOb = new Object[5];返回的仅仅只是一个数组的引用,对象实体并没有真正被创建,后续须要arrOb[index] = new Object();一次次的将实体创建并用之前创建的数组中的每个元素引用指向它。好啰嗦。。。。由此可以看出,C++中类数组实体是在一片连续的内存空间中,而Java中的类数组很可能在内存中的分配是东一个西一个。
分析了一下这种设计的原因,如果一个对象占用64个字节,那么5个对象就须要320个字节的空间,当创建一个5个该对象数组时,C++会去内存寻找一块不小于320字节的空间用来存放这5个对象。而Java只须要在可用内存空间中找出5块不小于64字节的位置,分别存放5个对象即可。这么做的好处是内存利用率增加,坏处是导致对数组逐元素操作时内存寻址速度减慢,严重影响程序执行效率。

  而Java在内存占用率上远远高出C++不只一筹,随便建个类都会产生一个Object实例。各种其它浪费内存的地方就不说了,这种设计的主要目的是为了让程序员开发效率更高,语言使用更简单。这是Java的根本所在,但是类数组的角度来看,Java又把类数组的申请弄的好复杂,内存占用上却又突然360度大转弯的来了个利用率,而把最关键的效率性远远抛到一边去。想不通,实在想不通。

1 个回复

倒序浏览
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马