以千字节为单位比较java应用程序与c应用程序

以千字节为单位比较java应用程序与c应用程序,java,c,memory,exe,executable-jar,Java,C,Memory,Exe,Executable Jar,我用java和c语言制作了两个相当小的应用程序。该应用程序是一个金融计算器(Black&Scholes),其中可以根据资产价格、罢工价格、波动率、时间和利率等参数计算买入和卖出价格 不知何故,我期望应用程序的大小以千字节为单位大致相同,但当我发现c文件要重得多时,我感到惊讶: c-program (exefile): 450 KB java-program (jar): 11.7 KB 也就是说,当c程序几乎是0.5MB时,jar文件只有11.7KB 这怎么解释呢 (第一幅图显示的是c-a

我用java和c语言制作了两个相当小的应用程序。该应用程序是一个金融计算器(Black&Scholes),其中可以根据资产价格、罢工价格、波动率、时间和利率等参数计算买入和卖出价格

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

 c-program (exefile): 450 KB
 java-program (jar): 11.7 KB
也就是说,当c程序几乎是0.5MB时,jar文件只有11.7KB

这怎么解释呢

(第一幅图显示的是c-app,最后一幅是java应用)


在不知道所有细节的情况下,我认为c程序是自包含的,即您可以在几乎任何Windows机器上运行它


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

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


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

c文件已经完成了大量的运行时和其他开销,而Java几乎可以被解释。请看,c是独立的,java需要rontime

c文件已经完成了大量的运行时和其他开销,而java几乎可以解释。看,c是独立的,java需要使用rontime来比较苹果和橙子。Java是一种解释语言,它编译字节码并使用jvm中可用的库。c编译成机器代码,包括静态库,但不包括操作系统可访问的动态共享库

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


C应用程序还依赖于使用的编译器和设置。例如,gcc对大小的影响与ms visual studio不同,调试模式编译比非调试模式编译要大得多。优化和模糊处理也起到了一定的作用。

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

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


C应用程序还依赖于使用的编译器和设置。例如,gcc对大小的影响与ms visual studio不同,调试模式编译比非调试模式编译要大得多。优化和模糊处理也起到了一定作用。

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