InfoQ

新闻

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

作者 Dionysios G. Synodinos译者 崔康 发布于 2008年12月1日 上午4时10分

社区
Java
主题
平台,
运行时
标签
Java SE

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

 

2 条回复

回复

我习惯了Java这样 发表人 jim liu 发表于 2008年12月3日 上午12时38分
必须的 发表人 小非 黄 发表于 2008年12月3日 下午1时9分
  1. 返回顶部

    我习惯了Java这样

    2008年12月3日 上午12时38分 发表人 jim liu

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

  2. 返回顶部

    必须的

    2008年12月3日 下午1时9分 发表人 小非 黄

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

深度内容

Flex与JSON及XML的互操作

平台需要互操作性。在这篇文章中,作者仔细研究了Flex和JSON及XML的互操作性。文章也包含了使用E4X库来将XML映射到图表和表格组件的内容,还演示了如何使用as3core库来解码JSON消息。

用Qi4j进行面向组合编程

本文将简要介绍面向组合编程(COP,Composite Oriented Programming)的概念,展示它如何规避OOP存在的一些问题,并重新点燃使用可重用部件组装领域模型(Domain Model)的希望。

系统开发——新学科,新教育

一门新的计算机学科——“系统开发”,强调人性化、匠艺、设计、创意、创新和新事物的涌现,并建议用被称为“bottega”的工作室替代乏善可陈的教室。

图书聚焦:Visual Studio 2008 揭秘

Mike Snell和Lars Powers用他们最近由Sams出版的新书《Visual Studio 2008揭秘》,试图帮助大家提高开发人员的生产力。本文包括一个下载样章——第10章调试。

BPEL为何不是BPM的圣杯?

Pierre Vigneras在本文中讨论了作为标准之一的BPEL所存在的问题。Pierre先给我们大致介绍了一个简单的并行流程,接着讨论了从业者在试图以一个结构化模型为基础表达非结构化流程时遇到的一系列问题。

基于范型的多语言编程

你是否仔细思考过,为什么人们总在讨论“要正确的语言做恰当的事情”?在这篇文章中,Sadek Drobi向你解释了为什么应该在系统内部混合使用多种语言。

采访与书摘《Pro Web 2.0 Application Development with GWT》

Jeff Dwyer就关于他的新书(《Pro Web 2.0 Application Development with GWT》)、GWT1.5以及创建可搜索的Ajax应用谈了一些他的见解。

时刻准备着,迎接IT业的春天

我们需要设身处地地为客户及客户的业务本身着想,与客户同舟共济。更多创新的思路、产品和模式也同样将为IT业带来新的出路。IT业并不需要坐以待毙,在春天到来之后,市场将会更加繁荣!