为什么 java 只允许动态链接?
Why does java allow only dynamic linking?
我在观看 YouTube 上关于编译器的教程视频时,发现 C 编程语言速度更快,因为它允许静态 linking 和动态 linking,但是 Java 只允许动态 linking,这就是为什么 C 比 Java.
快得多的原因
我的问题是,如果静态 linking 使程序 运行 更快,为什么它没有包含在 Java 中?我知道 Java 的开发人员做出不包含静态 linking 的决定一定有一些真正充分的理由,我只是想知道原因是什么。
注意:我不知道这个问题是否已经有关于SO的答案,但由于找不到答案,所以我发布了。如果答案已经存在,请提供 link 给它。
注意:所提供教程的 link 是印地语。抱歉。
Java 在编译时不包括链接器步骤。使用 Java 9 将有一个工具 (jlink: JEP 275, JavaOne Talk on Project Jigsaw) 将创建一个图像,其中将链接依赖项。
Java 创建时的主要目标之一是 "Code once, run everywhere"。静态链接环境相关库或代码部分将取消此功能。
Java 中的静态链接会强制编译器在每个应用程序中添加整个 JRE 库,这会浪费内存并且会破坏编译 once/run [=] 的任何优势13=].
C 并不快,因为静态链接与动态链接相比。那是一条红鲱鱼。
Java 加载时间通常很短,因为 VM 和标准库相对较大,这意味着需要加载的内容很多。
事实上,动态链接可用于加快 初始加载时间,因为 dlopen()
和朋友可以控制加载发生的时间,而不是预先支付费用(加载过程中)。
在这种情况下,一般来说,性能的一个主要差异在于内存,特别是在 C 语言中在某种程度上控制内存布局的能力。这可以产生巨大的好处,因为碎片更少,并且通过减少事情'cache size' CPU 缓存和推测硬件优化(如预取)工作得更好。
我在观看 YouTube 上关于编译器的教程视频时,发现 C 编程语言速度更快,因为它允许静态 linking 和动态 linking,但是 Java 只允许动态 linking,这就是为什么 C 比 Java.
快得多的原因我的问题是,如果静态 linking 使程序 运行 更快,为什么它没有包含在 Java 中?我知道 Java 的开发人员做出不包含静态 linking 的决定一定有一些真正充分的理由,我只是想知道原因是什么。
注意:我不知道这个问题是否已经有关于SO的答案,但由于找不到答案,所以我发布了。如果答案已经存在,请提供 link 给它。
注意:所提供教程的 link 是印地语。抱歉。
Java 在编译时不包括链接器步骤。使用 Java 9 将有一个工具 (jlink: JEP 275, JavaOne Talk on Project Jigsaw) 将创建一个图像,其中将链接依赖项。
Java 创建时的主要目标之一是 "Code once, run everywhere"。静态链接环境相关库或代码部分将取消此功能。
Java 中的静态链接会强制编译器在每个应用程序中添加整个 JRE 库,这会浪费内存并且会破坏编译 once/run [=] 的任何优势13=].
C 并不快,因为静态链接与动态链接相比。那是一条红鲱鱼。
Java 加载时间通常很短,因为 VM 和标准库相对较大,这意味着需要加载的内容很多。
事实上,动态链接可用于加快 初始加载时间,因为 dlopen()
和朋友可以控制加载发生的时间,而不是预先支付费用(加载过程中)。
在这种情况下,一般来说,性能的一个主要差异在于内存,特别是在 C 语言中在某种程度上控制内存布局的能力。这可以产生巨大的好处,因为碎片更少,并且通过减少事情'cache size' CPU 缓存和推测硬件优化(如预取)工作得更好。