写点什么

即将到来的消费级 JRE 鼎力放飞桌面 Java

  • 2007-09-30
  • 本文字数:1992 字

    阅读完需:约 7 分钟

在 JavaOne 大会上,Sun 公司不仅宣布了 JavaFX,而且其旗下的 Ethan Nicholas 和 Denis Gu 还进行了一场演讲,展示了将于2008 年投放的消费级JRE 上的一些细节工作。关于这个话题,“Filthy Rich Clients”的作者Chet Haase 写了一篇博客日志 。虽然细节上还不是完全清楚,但这是个很明确的信号,表明Sun 内部关注点朝桌面和最终用户体验上发生了一个重大转移,特别是对Windows 版的JRE 正在下大力量。

针对初始下载问题,Windows 版的消费级JRE 将引入原本为Java 7 规划的Java 内核。其工作原理为先获取常用的Java 运行时核心部分,比如虚拟机、垃圾回收器和类加载器,然后下载应用指定的其它依赖代码,下载加载时“找不到”的类代码,然后再并行下载JRE 的剩余部分,直到全部发行内容都安装到用户系统上。为了支持这种方式,Sun 对Java 类库的组织方式已经做了一些调整,产生出一个小了很多的 rt.jar,并把没包括进去的类和类库按通常的包边界划分组装成若干组件。结果是启动一个应用前必须下载的内容尺寸显著减小。比如 Limewire ,现在缩小到 4MB 以下。

通过减小组成 Java 运行时的各文件本身的物理尺寸,磁盘寻道(disk seek)时间也会减少一点,这有助于(减少)冷启动的时间,但是 Sun 有一个综合起来更激进的减少冷启动所需次数的方案。Java 某些部分已经在磁盘缓存中时,也就是热启动的情况下,速度早就优化得不错了——典型的应用大约 2-3 秒就能启动。不过,有时候碰到一些 Java 类库非常大,而操作系统要在其中寻找所需的各种数据,这时候冷启动会慢得难受。对此有一种解决办法比较常见(像 QuickTime 和 Internet Explorer 等应用就是这样),就是启动时将虚拟机载入内存。然而如果不跑什么 Java 程序的话,这样对 RAM 就是一种浪费,并且会让人觉得装了 Java 就会让机器运行得更慢。对于 Windows 版消费级 JRE,Sun 要追求的另一种方案,就是把 Java 核心文件置于磁盘缓存中。这通过执行一个后台服务定期动(touch)一下相关文件来实现。结果 Java 应用就可以获得和热启动相近的启动时间。该服务对机器整体性能影响很小,如果系统内存短缺时,操作系统会释放磁盘缓存而回收内存(不用像处理内存中的应用和数据那样,必须在回收之前把内存页内容写入磁盘)。在(内存)严重受限的机器上,该服务自行关闭,不影响系统。

为了帮助开发者给用户机安装正确版本的 Java,Sun 引入了一些新的 JavaScript 命令,开发者可以用来查明已经安装了哪些版本的 JRE,并且按需要提示用户安装新版本。目前的清单如下:

  • <strong>getJREs</strong>() 返回已安装 JRE 版本的清单
  • <strong>versionCheck</strong>(pattern) 有已安装 JRE 版本与字符串模式(例如:“1.5*”,“1.6+”)匹配时返回true
  • <strong>installLatestJRE</strong>() 使用浏览器或者“适于平台的机制”安装最新 JRE
  • <strong>writeAppletTag</strong>(attributes, parameters) 不再需要手工写 Applet 标签
  • <strong>runApplet</strong>(attributes, parameters, version) 确保合适的 JRE 版本已经安装,然后输出 Applet 标签
  • <strong>isWebStartInstalled</strong>() 检查 WebStart 是否已安装
  • <strong>createWebStartLaunchButton</strong>(jnlpURL) 输出一个按钮,点击时确保 WebStart 已安装然后启动特定的 JNLP

例如下面的脚本会检查是否已安装 JRE 1.5 或更高版本。如果已经安装 Applet 就会启动,如果还没有,就会要求用户下载 JRE:

<script><br></br>deployJava.runApplet({code:"Applet.class", archive:"applet.jar", width:320, height:240}, null, "1.5");<br></br></script>这个脚本还是有些限制。具体说它只能检测已安装最高版本的 JRE,并且只能检测家族版本(1.5 而不是 1.5.0_11),不过在 Sun 支持的所有平台上都可用。Windows 版的消费级 JRE 还包括了浏览器插件,可以通过本地代码执行这些功能,也就是说可以获得更准确的信息。从开发者的视点来看这些都是无缝处理的——这些 JavaScript 函数发现有插件时就直接调用插件。

同时还有其他一些增强。开发了一个新的跨平台 Swing 外观(Look & Feel),Nimbus, InfoQ 曾在这里加以报道。Sun 完全重写了安装程序,让它看起来远没有早先版本那么吓人。如果你不想用 Swing 的FileChooser(文件选择对话框),将来会有办法使用平台本地的FileChooser,Sun 同时暗示消费级 JRE 里还将会有新的媒体组件,虽然目前还没有具体细节透露出来。

查看英文原文: Upcoming Consumer JRE Seeks to Jumpstart Desktop Java - - - - - -

译者简介:岳立东,Ableverse 创始人,技术推广大使。开源项目 WoW (内含 ToB 对象数据库)和 SecureJSH 创建者。目前致力于东道组件接合(Hosting Based Interfacing)理论研究,在此基础上的软件并行分布架构及对象数据库应用,技术博客 http://complystill.javaeye.com/ 。欲参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com

2007-09-30 09:30872

评论

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

先楫半导体HPM6700系列正式合入OpenHarmony社区主干

Geek_2d6073

桌面端运行小程序的简易实操

FinFish

跨端开发 跨端运行 桌面应用 桌面应用开发

大专参加大数据培训学习要具备哪几方面的知识

小谷哥

设备接入物联网平台必知必会——设备接入类

阿里云AIoT

阿里云 数据 物联网 设备接入 协议解析

秒云加入OpenCloudOS操作系统开源社区,携手打造更智能、更可控、更可信的云原生环境

MIAOYUN

开源社区 opencloudOS

堡垒机小知识科普-行云管家

行云管家

网络安全 信息安全 堡垒机 等保2.0

如何把 ThinkPHP 5 的项目迁移到阿里云函数计算来应对流量洪峰?

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

Java培训机构应该怎么去学习开发技术

小谷哥

【Go电商实战03】如何使用ORM链式操作?如何优雅的实现软删除?

王中阳Go

Go golang 高效工作 学习方法 11月月更

分布式事务详解、理论分析、及强一致性(2PC、3PC)剖析

C++后台开发

数据库 分布式 后端开发 Linux服务器开发 C++开发

前端培训学习需要哪些知识?

小谷哥

Kotlin变量声明和类型推断

子不语Any

kotlin Andriod 11月月更

软件测试面试真题 | 测试一个你完全不熟悉的系统,你会怎么办?

测试人

软件测试 面试题 自动化测试 测试开发

零基础转行Web前端培训机构怎么选

小谷哥

使用 C++ 部署深度学习模型快速上手方案

MegEngineBot

c++ 深度学习 开源 MegEngine 模型部署

从HelloWorld看Java与Kotlin

子不语Any

kotlin Andriod 11月月更

手把手在桌面应用中运行小程序

Onegun

小程序 windows Mac 软件

Java Web(九)会话跟踪技术

浅辄

javaWeb session Cookie 11月月更

4K60帧!RayLink远程控制软件如何帮助设计师远程办公?

RayLink远程工具

远程控制软件 远程办公软件 远控软件 远程桌面连接 RayLink

泛型由入门到精通(2)

好程序员IT教育

Java 泛型

AI音乐创作,让每一个人都成为音乐家

HarmonyOS SDK

音频 HMS Core

新双机热备软件排名看这里!

行云管家

高可用 双机热备

TDSQL携手金蝶云·苍穹,发布“国产数据库联合解决方案”

腾讯云数据库

数据库 腾讯云 tdsql 金蝶 腾讯云数据库

前端安全问题及防护思路

FinFish

网络安全 安全 安全架构 移动安全 前端安全

低代码技术在研发团队的应用模式探讨

阿里巴巴终端技术

前端 终端 低代码 客户端

【Go电商实战04】为什么GoFrame不支持migrate功能?我还特意去问了框架作者

王中阳Go

golang 高效工作 学习方法 程序员 11月月更

沉浸式视听体验:全景声技术是如何实现的?

阿里云CloudImagine

阿里云 音视频 音频

关于DAO社区代币挖矿治理dapp系统开发

开发微hkkf5566

【电商实战02】如何借助工具快速生成代码?初学者容易踩的坑有哪些?

王中阳Go

golang 高效工作 学习方法 程序员 11月月更

合阔智云核心生产系统切换到服务网格 ASM 的落地实践

阿里巴巴云原生

阿里云 云原生 服务网格

浅析云原生

鲸品堂

即将到来的消费级JRE鼎力放飞桌面Java_Java_Charles Humble_InfoQ精选文章