Java 在JAR加载时填充对象池

Java 在JAR加载时填充对象池,java,jar,onload,objectpool,Java,Jar,Onload,Objectpool,我有一个核心JAR,它提供了一些功能,因此也用于许多其他应用程序——桌面应用程序、web应用程序等。现在,这个核心JAR维护了一个对象池,其中包含创建计算成本很高的对象。对象池的大小是固定的,因此我一次创建所有对象并填充池。 我想做的是,每当加载使用我的JAR的应用程序时,都会创建对象池,而应用程序不知道这样一个池的详细信息。而且,即使应用程序加载时间会因为池的数量而受到影响,但一旦应用程序超过此阶段,以后创建此类重对象时不应该再有任何性能影响 有没有办法做到这一点?除了在客户端应用程序中添加显

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


有没有办法做到这一点?

除了在客户端应用程序中添加显式挂钩以调用启动逻辑之外,唯一的办法是向类中添加静态初始值设定项以构建池

静态初始值设定项是在JVM首次加载类时(在调用类中的任何代码之前)运行的,这不是很确定,但通常是在第一次命中引用类的代码路径时运行的


我建议为客户端应用程序调用的启动逻辑提供某种挂钩,这样他们就可以精确地控制这类事情,而不是让启动逻辑在不可预知的时间运行。

这样做的唯一方法,除了在客户端应用程序中添加显式钩子来调用启动逻辑之外,还需要向类中添加静态初始值设定项来构建池

静态初始值设定项是在JVM首次加载类时(在调用类中的任何代码之前)运行的,这不是很确定,但通常是在第一次命中引用类的代码路径时运行的


我建议为客户端应用程序调用的启动逻辑提供某种挂钩,这样客户端应用程序就可以精确地控制这类事情,而不是让启动逻辑在不可预知的时间运行。

您也可以使用类似于静态池的单例模式的方式,惰性地执行此操作。第一次调用依赖它的方法时,可以填充池。您也可以使用类似于静态池的singleton模式的方法惰性地进行填充。第一次调用依赖它的方法时,可以填充池。