当前位置: 首页 > 面试题库 >

什么是更快的Java或C#(或较旧的C)?

巩枫
2023-03-14
问题内容

我目前正在决定要在其上构建科学计算产品的平台,并且正在决定在Core2 Quad
CPU上使用C#,Java或带有Intel编译器的纯C语言。它主要是整数运算。

到目前为止,我的基准测试表明Java和C彼此差不多,并且.NET /
C#落后大约5%,但是我的许多同事都声称经过适当的优化的.NET将在足够的时间上击败这两个方面。供JIT开展工作。

我一直以为JIT会在应用启动后的几分钟内完成它的工作(在我看来,可能是几秒钟,因为它主要是紧密的循环),所以我不确定是否要相信它们

谁能说明情况?.NET会击败Java吗?(或者我现在最好还是坚持使用C?)。

该代码是高度多线程的,数据集的大小为数TB。

在这种情况下,Haskell / Erlang等不是选项,因为将有大量现有的旧C代码将移植到新系统,并且将C移植到Java /
C#比Haskell或Erlang简单得多。(除非这些当然提供了显着的加速)。

编辑:我们正在考虑迁移到C#或Java,因为从理论上讲它们可能更快。我们可以节省处理时间的每一%,每年可以为我们节省数万美元。在这一点上,我们只是试图评估C,Java或c#是否会更快。


问题答案:

问题中的关键信息是:

我们可以节省处理时间的每一%,每年可以为我们节省数万美元

因此,您需要考虑 每一%的 费用削减多少钱 。如果优化工作每年花费数万美元,那是不值得的。您可以通过解雇程序员来节省更多。

有了合适的技能(今天很少见,因此价格更高),您就可以手工制作汇编程序,以获取最快的代码。使用很少(稀有且昂贵)的技能,您可以用看起来非常丑陋的C代码完成几乎一样的工作。等等。您从中挤出的性能越多,开发工作就会付出的代价就越多,付出更大的努力就会得到越来越少的回报。如果从中获得的利润保持在“每年几万美元”,那么就会有一点不再值得付出努力了。实际上,我很可能会猜到您已经到了这一点,因为“每年几万美元”在一个薪水的范围内,可能不足以购买手动优化复杂程序所需的技能。

我想如果您已经用C语言编写了代码,那么将它们全部重写为另一种语言的直接翻译的工作将浪费90%的工作。仅仅因为您将不会利用平台的功能,而是相反地对它们进行工作(例如,尝试像使用C一样使用Java),它的运行速度很可能会变慢。

同样,在您现有的代码中,将有部分对运行时间做出至关重要的贡献(它们经常运行),而其他部分则完全无关(它们很少运行)。因此,如果您有加速程序的想法,那么浪费时间将其应用于不影响运行时间的程序部分就没有任何经济意义。

因此,使用探查器查找热点,并查看现有代码在哪里浪费了时间。

当我发现对代码的引用为“多线程”时进行更新

在这种情况下,如果您集中精力消除瓶颈,以便程序可以在大量内核上很好地扩展,那么它将自动以每年的速度增长,其速度将使您无法进行的其他优化相形见war。明年的这个时候,四核将成为台式机的标准配置。第二年,8核将变得更便宜(我一年前以几千美元的价格购买了一个),并且我预计到那时,一台32核机器的成本将低于开发人员。



 类似资料:
  • 哪个效率更高,占用内存更少,循环速度更快,为什么? 案例1: 案例2: 谢谢

  • 问题内容: 这个问题对我来说只是个问题,因为我一直喜欢编写优化的代码,这些代码也可以在廉价的慢速服务器(或具有大量流量的服务器)上运行 我环顾四周,却找不到答案。我想知道在这两个示例之间有什么更快的方法,请牢记在我的案例中数组的键并不重要(自然是伪代码): 因为问题的关键不是数组冲突,所以我想补充一点,如果您担心冲突的插入,可以使用。它仍然可能导致冲突,但是当从用户提供的文件中读取时,它可以避免可

  • Python的http.server(或Python 2的SimpleHTTPServer)是从命令行提供当前目录内容的一种很好的方式:

  • 问题内容: Bloch中的方法同时使用和复制一个数组。 如何比较这两种复制方法,何时应使用哪种复制方法? 问题答案: 同之处在于不仅复制元素,还创建新的数组。复制到现有阵列中。 这是的来源f,你可以看到它在内部用于填充新数组:

  • 问题内容: 我听说在某些情况下,由于JIT优化,Java程序或Java程序的某些部分比C ++(或其他预编译的代码)中的“相同”代码执行得更快。这是由于编译器能够确定某些变量的范围,避免某些条件并在运行时提取类似的技巧。 您能否举一个(或更佳的)例子,在哪里适用?也许概述了编译器能够优化字节码的确切条件,超出了预编译代码的范围? 注意: 此问题 不是 关于将Java与C ++进行比较。关于JIT编

  • 问题内容: 我正在编写一个拒绝访问未授权用户的安全系统。 它可以按预期授予授权用户访问权限,但也允许未经授权的用户使用! 为什么会发生这种情况?我已经明确指出仅在name等于,或 时才授予访问权限。我也尝试过相反的逻辑if ,但是结果是一样的。 问题答案: 在许多情况下,Python的外观和行为都像自然的英语,但这是这种抽象失败的一种情况。人们可以使用上下文线索来确定和是与动词连接的对象,但是Py