使用实时 Java 进行开发,第 2 部分: 改善服务质量
2009-11-02 00:00:00 来源:WEB开发网清单 1. 用于加载新类的很少执行的条件示例
Iterator<MyClass> cursor = list.iterator();
while (cursor.hasNext()) {
MyClass o = cursor.next();
if (o.getID() == 17) {
NeverBeforeLoadedClass o2 = new NeverBeforeLoadedClass(o);
// do something with o2
}
else {
// do something with o
}
}
异常类是只能在应用程序执行期间加载的类的另一个例子,因为异常在理想情况下(但不一定会遇到这种情况)很少发生。由于异常通常难以快速处理,所以加载额外的类的附加开销可能使操作延迟超出重要阈值。一般而言,应该尽可能避免在时间关键型操作期间抛出异常。
也可以在 Java 类库中使用某些服务(比如反射)时加载新类。反射类的底层实现会动态生成将加载到 JVM 中的新类。在时间敏感型代码中反复使用反射类可能导致持续不断的类加载活动,这会引起延迟。使用 -verbose:class 选项是检测正在被创建的类的最佳方式。或许避免在程序执行期间创建这些类的最佳方式在于,避免在应用程序的时间关键型部分使用反射服务来从字符串映射类、字段或方法。相反,在应用程序执行过程中尽早调用这些服务并存储结果共以后使用,这可以避免在不需要时动态创建大部分这样的类。
一种在应用程序的时间敏感型部分避免类加载延迟通用技术是,在应用程序启动或初始化期间预先加载类。尽管这个预加载步骤带来一定的启动延迟(改善一个指标通常会对其他指标带来负面影响),但是如果小心使用,这一步可以在以后消除不需要的类加载过程。这种启动流程很容易实现,如清单 2 所示:
更多精彩
赞助商链接