在JAR加载上填充对象池

时间:2010-02-18 03:53:46

标签: java jar onload objectpool

我有一个核心JAR提供了一些功能,因此也用于许多其他应用程序 - 桌面应用程序,Web应用程序等。现在,这个核心JAR维护一个对象池,其中包含创建计算成本高昂的对象。对象池具有固定大小,因此我一次创建所有对象并填充池。 我想要做的是,无论何时加载使用我的JAR的应用程序,都会创建对象池而应用程序不知道此类池的详细信息。即使应用程序加载时间因池数量而受到影响,但是一旦应用程序超过此阶段,以后在创建此类重型对象时不应再有任何性能损失。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

除了在客户端应用程序中添加显式挂钩以调用启动逻辑之外,执行此类操作的唯一方法是向类中添加静态初始化程序以构建池。

当您的类首次由JVM加载时(在调用类中的任何代码之前)运行静态初始化程序,这不是确定性的,但通常是在首次命中引用您的类的代码路径时。

我建议在启动逻辑中提供某种钩子,以便客户端应用程序调用,这样他们就可以精确地控制这种类型的东西,而不是让你的启动逻辑在不可预测的时间运行。