BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

庞大、整体化的JDK应该模块化

| 作者 Dio Synodinos 关注 3 他的粉丝 ,译者 崔康 关注 0 他的粉丝 发布于 2008年12月2日. 估计阅读时间: 6 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

Sun公司的首席工程师——Mark Reinhold一直主张将Sun JDK模块化。他举例说明了复杂性如何损害这个平台,以及JDK 6 update 10版的Java Kernel和Quickstarter的功能只是解决了JDK长期关联成长导致的表面诟病。  

Mark首先解释了JDK为何会成为现在这样庞大的状态:

JDK非常大,但还没有像宇宙这么大。

JDK很大是因为在过去13年里,Java SE平台已经从一个最初打算用于嵌入式设备的小系统发展成为横跨广阔领域、服务于广大需求的一套丰富的库集合。拥有这样一个庞大且功能强大的瑞士军刀真是难以置信的方便,不过尺寸却不合适。

他接着解释了由此导致的缺点:

JDK很大——同时也是紧密关联的。它作为一个整体的软件系统构建。在这种开发模式下,当编写新代码或者改进老代码的时候,很自然地会利用平台的其他部分,依靠Java虚拟机的灵活链接机制保证运行时一切都正常工作。

但是多年来,这种开发形式导致了API之间的意想不到的关联——和API的实现之间——这又增加了启动时间和内存占用。例如,一个简单的命令行“Hello, world!”程序,现在加载和初始化超过300个单独的类,尽管做出了更优秀的工程优化(比如类共享),但是在最新的桌面系统上仍然需要100毫秒。当然,对于更大的应用来说,情况会更糟糕。

Mark似乎认为JDK 6 update 10版中的Java Kernel和Quickstarter功能是不够的:

JDK 6 update 10版的Java Kernel和Quickstarter功能的确改善了下载时间和(冷)启动时间,至少对Windows用户来说是这样。这些技术也确实解决了长期关联成长的表面诟病,但是,没有解决根本问题。
模块化JDK——最有希望改进下载时间、启动时间和内存占用这些关键值的方法是正面解决根本问题:把JDK划分为一系列定义良好的、单独的、但是互相依赖的模块。

他又谈论了模块化对平台的好处:

把JDK分解为模块的过程会强迫所有意想不到的关联公开化,然后经过分析,多数会被隐藏或者消除。这反过来,会减少加载类的总数,从而改善启动时间和内存占用。
 
如果我们有一个模块化的JDK,在下载时,我们就会提供启动特定应用所需的那些模块,而不是整个JRE。Java Kernel是这种解决方案的第一步,使用定义良好的模块的进一步好处是下载流可以根据当前应用的特定需要提前定制。

Weijun对最初的帖子发表了意见,认为JDK的整体特性是由于Java没有管理依赖的合适方式导致的

JDK很大是因为Java从来没有指定任何管理软件依赖的工业级方法。

因此,唯一可靠部署java栈的办法就是把它打包成一个巨大的怪物。

顺便说一句,只有SUN和其JDK是这样的。这种缺少依赖性管理的最坏结果不是导致JDK臃肿,而是所有带有硬编码类路径和大量分支的无法管理的应用(因为如果你无法独立的管理和更新依赖,你可能会分支出一个被迫绑定到应用的私有拷贝)。

你应该很容易理解为什么Java只存在于J2EE服务器中(服务器提供了基础java平台所缺少的管理功能)

GeekyCoder认为模块化的JDK对大多数开发人员来说可能不是最急需的

虽然这很“酷”,但我怀疑这对大多数开发人员来说是否是最急需的。

我有一种不好的感觉,就是你可能会被少数对你博客的积极回应所影响,而不论他们是否代表了整个Java开发社区。

即使只是修复一个票数最多的bug也比仅仅搞“酷”要好得多。
 
我认为“倾听你的客户”只是一个过时的、封闭的、已经被彻底抛弃的想法,但是,看一看好的方面...你现在拥有两名声称乐于助人的开发人员。祝你好远。

Similarly Michael B似乎认为企业用户不关心模块化JDK

模 块化的JDK(或更确切地说JRE)对企业用户完全无关。我认为,企业用户喜欢JDK它现在的样子,因为模块意味着依赖,这听起来像“DLL地狱” 。现在JDK很容易分发和打补丁,这很重要。另外,Java具有良好的向上兼容性:不仅“编写一次,到处运行” ,而且还“编写一次,永远运行” ,这意味着巨大的投资回报率( ROI )。这是人们更喜欢Java而不是.NET的原因之一 。MS的战略一直是: “这是添加了最新功能的新版本,请修改和兼容你的所有应用。 ”MS技术太短命了。 Java平台目前已经模块化:模块是我的应用所需要的第三方库。我喜欢SUN的模式——只有这些库足够成熟了才会变成平台的一部分。 健壮性和可靠性是Java成功的关键。所以,请回去继续解决那些剩余的bug吧。我真的很喜欢JDK 6 update 10版的这方面功能。
 

你可以通过InfoQ获取Java平台或者Java SE的更多信息。

查看英文原文:The Massive, Monolithic JDK should become Modular

 

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

我习惯了Java这样 by liu jim

如果真的那样,还要考虑Java模块化,那才是噩梦的开始

必须的 by 黄 小非

任何语言体系不都是这样么......

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT