java - Java 数组与 C++ 数组的性能和内存使用情况

标签 java c++ database arrays performance

我在一家小公司工作,负责开发一些银行软件。现在,我必须构建一些数据结构,例如:

Array [Int-Max] [2] // Large 2D array

将其保存到磁盘并在第二天加载以备将来工作。

现在,由于我只知道 Java(和一点点 C),他们总是坚持让我使用 C++ 或 C。根据他们的建议:

  1. 他们已经看到,Java 中的 Array [Int-Max] [2] 占用的内存几乎是 C 的 1.5 倍,而 C++ 占用的内存比 Java 还要合理。

  2. C 和 C++ 可以处理任意大的文件,而 Java 则不能。

根据他们的建议,随着数据库/数据结构变大,Java 变得不可行。由于我们必须处理如此庞大的数据库/数据结构,C/C++ 总是更可取。

现在我的问题是,

  1. 为什么在大型数据库/数据结构上 C 或 C++ 总是比 Java 更可取?因为,C 可能是,但 C++ 也是 OOP。那么,它如何获得优于 Java 的优势呢?

  2. 我应该继续使用 Java 还是他们的建议(切换到 C++)将来在大型数据库/数据结构环境中会有所帮助?有什么建议吗?

对不起,我对所有这些都知之甚少,刚刚开始从事一个项目,所以真的很困惑。因为到现在我才建了一些学校项目,对比较大的项目一无所知。

最佳答案

why C/C++ is always preferable on large database/data-structure over Java ? Because, C may be, but C++ is also an OOP. So, how it get advantage over Java ?

请记住,Java 数组(对象)1 实际上是一个引用数组。为简单起见,让我们看一个一维数组:

java:

[ref1,ref2,ref3,...,refN]
ref1 -> object1
ref2 -> object2
...
refN -> objectN

c++:

[object1,object2,...,objectN]

在使用 C++ 版本时,数组中不需要引用的开销,数组包含对象本身 - 而不仅仅是它们的引用。如果对象很小 - 这种开销可能确实很大。

另外,正如我在评论中已经说过的 - 在 C++ 中分配小对象时,还有另一个问题。在 C++ 中,您分配一个对象数组——它们在内存中是连续的,而在 java 中——对象本身不是。在某些情况下,它可能会导致 C++ 具有更好的性能,因为它比 java 程序的缓存效率更高。我曾经在 this thread 中解决过这个问题

2) Should I stay on Java or their suggestion (switch to C++) will be helpful in future on large database/data-structure environment ? Any suggestion ?

我不相信我们可以为您解答。您应该了解每个用于您的目的的所有优点和缺点(内存效率、可以使用的库、开发时间......)并做出决定。不要害怕从贵公司的资深开发人员那里获得建议,他们比我们拥有更多关于系统的信息。
如果这个问题有一个简单而通用的答案 - 不需要我们工程师,不是吗?

您还可以在实现核心之前使用预期的数组大小和 stub 算法来分析您的代码并对其进行分析,以了解预期的真正差异。 (假设数组确实是预期的主要空间消费者)


1:我接下来要描述的开销与基元数组无关。在这些情况下(原语),数组是 values 的数组,而不是 references 的数组,与 C++ 相同,数组本身的开销很小(length 字段,例如)。

关于java - Java 数组与 C++ 数组的性能和内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073325/

相关文章:

java - native 查询可以使用 sqlDeveloper,但使用 hibernate 时失败

java - JPanel 不显示我的图形

c++ - 如何检查运算符的优先级

database - 获取oracle错误ORA-12541

mysql - 数据库充满重复条目

database - 是否有允许针对多个数据库产品测试代码的服务?

java - 链表插入使用头部插入

java - Android Webview - 如果太大则调整图像大小

c++ - 如何使用智能指针动态向上转换和向下转换?

C++ switch语句奇数输出