为什么java只允许动态链接?

时间:2015-12-04 09:28:39

标签: java compiler-construction static-linking dynamic-linking

我在YouTube上关注编译器的教程视频时,我发现C编程语言更快,因为它允许静态链接和动态链接,但Java只允许动态链接,这是为什么C比Java快得多。

我的问题是,如果静态链接使程序运行得更快,为什么它不包含在Java中?我知道为什么Java的开发人员决定不包含静态链接必须有一些真正的理由,我只是想知道原因是什么。

注意:我不知道这个问题是否已经在SO上有答案,但由于我找不到,所以我发布了。如果答案已经存在,请提供链接。

注意:提供的教程链接是印地语。对不起。

3 个答案:

答案 0 :(得分:6)

Java在编译时不包含链接器步骤。使用Java 9,将会有一个工具(jlink:JEP 275JavaOne Talk on Project Jigsaw),它将创建一个链接依赖关系的图像。

Java创建时的主要目标之一是“一次编码,随处运行”。静态链接环境相关库或代码部分将否定此功能。

答案 1 :(得分:2)

Java中的静态链接会强制编译器在每个应用程序中添加整个JRE库,这会浪费内存,并且会破坏编译一次/运行Java的任何优势。

答案 2 :(得分:2)

由于静态与动态链接,C不会更快。那是一只红鲱鱼。

Java加载时间通常较差,因为VM和标准库相对较大,这意味着需要加载很多。

事实上,动态链接可用于加快初始加载时间,因为dlopen()和朋友可以控制何时加载而不是预先支付费用(在加载期间)。

在这种情况下,一般来说,性能的一个主要差异在于内存,特别是在C中在某种程度上控制内存布局的能力。这可以产生实质性的好处,因为它具有更少的碎片并且可以将内容减少到& #39;缓存大小' CPU缓存和推测性硬件优化(如预取)工作得更好。