AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

  • 2008-12-01
  • 本文字数:1826 字

    阅读完需:约 6 分钟

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

2008-12-01 04:101387
用户头像

发布了 501 篇内容, 共 272.8 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

大数据中必须要掌握的 Flink SQL 详细剖析

五分钟学大数据

flink 11月日更

质量基础设施一站式综合服务平台,NQI一站式服务线上平台

电微13828808271

【SpringBoot搭建个人博客】- 后台登录(四)

Java 程序员 后端

用APaaS平台落地高校闲置资产调剂业务

明道云

公有云是什么意思?其存在的意义是什么?

行云管家

云计算 公有云 私有云 混合云

【Java设计模式实战系列】好的单例模式是怎样的?

Java 程序员 后端

【Java设计模式系列】装饰器模式(Decorator Pattern)

Java 程序员 后端

【Java面经】阿里三面被挂!幸获内推,历经5轮终于拿到口碑offer(1)

Java 程序员 后端

【MyBatis系列2】最全MyBatis核心配置文件总结,可以作为工具先收藏了

Java 程序员 后端

【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架

Java 程序员 后端

【Java面试题】常见Java面试知识点总结

Java 程序员 后端

【Redis缓存】- Redis数据结构、基本命令操作、持久化

Java 程序员 后端

【Java知识点详解 7】装箱和拆箱

Java 程序员 后端

【Java面试题总结 4】Java Web、网络、设计模式综合篇

Java 程序员 后端

【Redis面试题】Redis的字符串是怎么实现的?

Java 程序员 后端

【springcloud】eureka服务治理入门

Java 程序员 后端

【Java核心面试宝典】Day3、图解HashMap高频面试及底层实现架构!

Java 程序员 后端

【Java每日面试题】大厂是如何设计秒杀系统的?

Java 程序员 后端

【Java面经】阿里三面被挂!幸获内推,历经5轮终于拿到口碑offer

Java 程序员 后端

【MyBatis系列4】一对一,一对多,多对多查询及延迟加载(N+1问题)分析

Java 程序员 后端

【springcloud合集】02:微服务架构理论基础

Java 程序员 后端

【增强】(注解)SSM之配置多数据源

Java 程序员 后端

万文讲解实时数仓架构演进

大数据技术指南

11月日更

【Redis系列2】Redis字符串对象之SDS(简单动态字符串)实现原理分析

Java 程序员 后端

【Spring Boot 8】Okhttp实现GitHub第三方登录

Java 程序员 后端

【Spring Cloud 12】分布式架构下的高可用设计与可伸缩设计

Java 程序员 后端

过等保选择云堡垒机还是硬件堡垒机比较好?

行云管家

网络安全 云服务 堡垒机 等级保护

墨天轮国产数据库沙龙 | 张晓庆:GoldenDB分布式数据库的自动安装与备份恢复

墨天轮

数据库 技术沙龙

【Spring 工厂】注入详解 — Set注入(JDK内置类型

Java 程序员 后端

技术干货 | Flutter在线编程实践总结

有道技术团队

flutter 大前端 #技术干货#

区块链食品溯源平台,给食品定制数字“身份证”

电微13828808271

庞大、整体化的JDK应该模块化_Java_Dio Synodinos_InfoQ精选文章