【问题标题】:Comparing a java-app with a c-app in kilobytes以千字节为单位比较 java-app 和 c-app
【发布时间】:2014-01-11 13:21:38
【问题描述】:

我用 java 和 c 语言制作了两个相当小的应用程序。该应用程序是一款金融计算器 (Black & Scholes),可以在给定参数资产价格、执行价格、波动率、时间和利率的情况下计算看涨和看跌价格。

不知何故,我希望这些应用程序的大小以千字节为单位大致相同 - 但当我发现 c 文件要重得多时,我感到很惊讶:

 c-program (exefile): 450 KB
 java-program (jar): 11.7 KB

也就是说,当 c 程序接近 o.5 MB 时,jar 文件只有 11.7 KB。

这怎么解释?

(第一张图是 c-app,最后一张是 java app)

【问题讨论】:

  • 您忘记将 JVM 的大小添加到您的 java 代码中。 (以及 C 代码所需的 DLL 大小。)
  • 正如其他回答都无法理解的那样,您没有进行公平的比较。在大多数程序中,需要考虑的远不止二进制文件的大小。不仅是使该二进制文件工作所需的运行时,不仅是所需的动态链接库,而且即使比较两个都以c 开头的二进制文件,在没有限定条件的情况下也是不公平的,因为该文件可以包含执行不需要但存在的内容协助调试 - 制作不反映实际所需代码大小的非常不同的文件大小。
  • 为了进行更有意义的比较,您应该尝试打包这两个应用程序,使每个应用程序都可以安装在目标系统上而无需安装任何第三方软件(即全新的 Windows 安装),然后比较两个安装包的大小。请注意,对于 GTK 版本,您需要在安装程序中提供 GTK,对于 Java 版本,您需要在安装程序中提供 JVM。

标签: java c memory exe executable-jar


【解决方案1】:

你试图比较苹果和橘子。 Java java 是一种解释性语言,它编译字节码并使用 jvm 中可用的库。 c 编译成机器码,包含静态库,但不包含操作系统可用的动态共享库。

因此,这取决于许多因素和具体项目。

C 应用程序还取决于使用的编译器和设置。例如,gcc 对大小的影响与 ms visual studio 不同,调试模式编译将比非调试大得多。优化和混淆器也很重要。

【讨论】:

    【解决方案2】:

    在不了解所有细节的情况下,我认为 c 程序是独立的,即您几乎可以在任何 Windows 机器上运行它。

    要运行 Java 应用程序,您需要安装 JVM,它带来了很多功能(例如...字符串类型或数学库),因此这些不需要包含在您部署的 jar 文件中。

    【讨论】:

      【解决方案3】:

      c 文件编译了很多运行时和其他开销,而 java 几乎被解释了。看,c 是独立的,java 需要 rontime

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-09
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多