【发布时间】:2012-08-17 21:19:25
【问题描述】:
我在一家小公司工作,负责开发一些银行软件。现在,我必须构建一些数据结构,例如:
Array [Int-Max] [2] // Large 2D array
将其保存到磁盘并在第二天加载以备将来工作。
现在,由于我只知道 Java(和一点点 C),他们总是坚持让我使用 C++ 或 C。根据他们的建议:
他们已经看到,Java 中的 Array [Int-Max] [2] 占用的内存几乎是 C 的 1.5 倍,而 C++ 占用的内存比 Java 还要合理。
C 和 C++ 可以处理任意大的文件,而 Java 不能。
根据他们的建议,随着数据库/数据结构变大,Java 变得不可行。由于我们必须处理如此庞大的数据库/数据结构,C/C++ 总是更可取。
现在我的问题是,
为什么 C 或 C++ 在大型数据库/数据结构上总是比 Java 更可取?因为,C 可能是,但 C++ 也是 OOP。那么,它如何获得优于 Java 的优势呢?
我应该继续使用 Java 还是他们的建议(切换到 C++)将来在大型数据库/数据结构环境中会有所帮助?有什么建议吗?
对不起,我对所有这些都知之甚少,刚刚开始从事一个项目,所以真的很困惑。因为到现在我才建了一些学校项目,对比较大的项目一无所知。
【问题讨论】:
-
数组的type是什么?如果您使用 primitives,我怀疑内存使用量会很大。
-
@amit,任何类型的对象。在开始之前,我只想了解一下,我能做到多少——。因为我的时间真的很短:)。
-
此外,您可以在实现核心之前使用预期的数组大小和存根算法对代码进行概要分析,并对其进行概要分析以查看预期的真正差异。 (假设数组确实是预期的主要空间消费者)
-
我担心这里的要求可能比我们(作为读者)所知道的要多。也就是说,为什么要声明这么大的二维数组?没有其他实现,例如稀疏数组等本质上不会占用太多内存吗?就“大”文件而言,定义“大?”理论上,随机访问文件可以任意大,底层文件系统,然后是硬件,对性能的影响与任何事情一样多。非常广泛地,解释的 Java 字节码可能会比编译的 C++ 包含性能损失......这里有很多变量。
-
还有一件事。在数组与 java 中分配 C++ 中的小对象时还有另一个问题。在 C++ 中,您分配一个对象数组——它们在内存中是连续的,而在 java 中——对象本身不是。在某些情况下,它可能会导致 C++ 具有更好的性能,因为它比 java 程序的缓存效率更高。我曾经在this thread 中解决过这个问题
标签: java c++ database arrays performance