background image

的本地代码。在 Web环境下运行 Applet 程序之前,类文件首先必须被下载到客户端。
类文件越大,程序下载时间越长。特别是对于网络并不发达的地区,由于网络的传输速度
较慢,因此这种问题表现的更加突出。
    从编译的角度入手,我们可以采用以下三种方式来降低类文件的大小:

1.   使用 Java编译器的优化选项

    在缺省条件下, JDK提供的

javac 编译器生成的类文件包含程序行号信息(加入行

号信息的作用是便于用户进行调试,同时在程序运行时如果出现例外,则解释器会利用行
号信息显示出例外发生的行号)。如果使用 -g选项进行编译操作,那么类文件也包含变
量调试信息。这些额外的数据在类文件中占据了一定比例。通过使用 -O 选项启动编译
优化器进行编译,则可以强制 javac 编译器删除这些额外数据。这种优化选项也可以造

javac 编译器删除一些冗余的代码,但是同时它也内嵌一些方法用于改进性能(这些

方法也占据了类文件的一定空间)。与一个标准的 C 编译器不同,

javac 的- O 选

项在优化方面所作的工作还非常有限。

2.   以 Java档案文件( JAR文件)的形式对类进行压缩处理

    从 Java 1.1 开始, JDK就提供了生成 Java 档案文件( JAR文件)的功能。这种
经过压缩处理的文件中包含了 Java类,其压缩方法基于 ZIP 压缩格式。档案文件的使
用显著地降低了类文件所占用的磁盘空间,例如标准的 Java 类库经过压缩处理后所占用
的磁盘空间从 8.63MB 降低到

5.03MB 。这是一种最简单也是最有效的降低类文件所

占空间的方法。此外,因为档案文件将多个类打包在一个文件里,因此在 Applet 下载过
程中只涉及了一次 FTP 事务处理,因此下载时间大大加快了。开发人员可以使用 JDK
提供的

jar 工具来生成 JAR 文件。例如,

jar –cf classes.jar *.class 命令实现了将当

前目录中所有类文件封装成 JAR文件的功能。在 HTML文件中的 APPLET 标签支持

ARCHIVE 参数,该参数的取值为当前 Applet 程序中所使用的 JAR 文件路径。如果我

们在一个 Java 应用程序中引用 JAR 文件,则我们必须在系统环境变量 CLASSPATH
中加入 JAR文件的路径。

3.   使用扰码处理技术降低空间占用量。

Java解释器实现对类的动态链接,也就是说,解释器并不是一次将所有类进行加载,

而是在运行时遇到类引用时才对其进行加载。正是由于这个原因,每个类文件必须包含标
识符的名称。这就导致了可能由于标识符名称过于冗长而导致类文件所占磁盘空间的加大

当然,这并不是使用简短但含糊不清的标识符名称的理由。扰码处理使字节代码经过反编
译后不可理解,此处理首先修改所有变量和方法的名称。目前适用的扰码处理器很多。扰

 

码处理器实现了重命名技术,该技术称为 负载归纳 ,即在实现上不是 将每个现有名称
重新命名,而是尽可能将方法重命名为相同的名称。重新命名的标识符简短且隐秘,这也
是降低类文件大小的一种方法。
    当然,在使用过程中我们要注意以下几点。首先,必须对Applet 中使用的所有类进行
扰码处理,否则虚拟机将不能够对类和方法标识符进行匹配。这意味着您不能够对希望提
供外部访问功能的类进行扰码处理。此外,任何通过字符串引用一个标识符的程序将失败
(因为标识符已经被重新命名,但是字符串仍然按照原始的命名设置)。例如,方法

getClass().getMethod(“_ 方法名称

_”,null) 将失败。然而,在许多应用程序中这种现象

2