java - 如何在启动时提高 Guice 性能

标签 java performance guice

好吧,我知道我的计算不客观等等,但无论如何,我讨厌在执行单元测试时等待这么多时间:

我的 guice swing 应用程序需要大约 7 秒来初始化。这是一个简单的 IRC 客户端。在那一刻,没有连接打开,我什至还没有调用任何 java.io 或 java.net 类。我试图缩小确切的错误范围,我得到 Guice 使用 5.8 秒(平均)来创建带有我正在使用的 2 个模块的注入(inject)器(一个普通模块和一个使用 FactoryModuleBuilder 构建,安装在原始模块中)。

当我删除所有模块时(因此基本上只准确地调用 Guice.createInjector()),它仍然需要 3.5 秒。

我使用的 Guice 版本是 3.0 rc2。我的电脑当然不是最新的,但也不会超过 3 年。

那么,如果可能的话,我怎样才能提高 Guice 的性能呢?


作为引用,这是我正在使用的主要方法,它导致了 3.5 秒。后续调用需要 0.01 秒

public static void main(String[] args) {

    long t = System.currentTimeMillis();
    Injector injector = Guice.createInjector();
    long t1 = System.currentTimeMillis();
    System.out.println(((t1 - t)) / 1000.0);
}

结果

3.578

最佳答案

  • 您不需要在单元测试中使用 Guice。如果您确实需要使用它,它们可能并不是真正的单元测试(在隔离中测试事物)或者您没有正确使用 Guice,或者两者兼而有之。
  • Guice 绝对不应该花费任何秒数来启动,除非您的代码中有某些东西导致了一些奇怪的事情。在我的机器上(使用 3.0 rc2),使用 Guice.createInjector() 创建一个 Injector 并且没有模块需要 100 多毫秒。

关于java - 如何在启动时提高 Guice 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748405/

相关文章:

php - 在 PHP 的页面上多次调用单例方法不好吗?

java - 如何让 Guice 将带注释的注入(inject)绑定(bind)到单个实例

java - Sparksee 在 session 关闭时崩溃

java - JUnit 测试失败时显示用户友好的消息

sql-server - SQL内存-查看实际使用的内存和可用内存

java - 嵌套数据结构的对象创建,对性能的可避免影响?

java - 为什么我的实例变量没有通过 @Inject 初始化并给出 null?

java - MapBinder 在 Guice 3.0 中不可用

java - 在 Java 中生成具有最大值、最小值和平均值(平均值)的随机数

java - 合成采样声音