gpt4 book ai didi

java - 通用 Guice 性能指南

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:04 29 4
gpt4 key购买 nike

我目前有一个命令行工具,它大量使用了 Guice 及其扩展。

完成该工具的功能后,我确定性能不合标准,并开始使用简单的 hprof 进行分析。

这已经指出,仅仅创建 Injector 是一个重大的性能问题。我通常避免在模块中做任何实际工作,并为提供者保留计算密集型工作......

鉴于此,Guice 的一般性能指南是什么?我应该避免使用@AssistedInject 和FactoryModuleBuilders 吗?尽可能避免@Singletons?确保所有绑定(bind)都是显式的并避免 JIT 绑定(bind)?

我到处搜索,但除了有人说它真的很快之外,我找不到太多关于基本 Guice 性能的内容。

最佳答案

首先,您的问题还有很多不足之处。什么是“不合标准”的性能?您是如何决定这意味着什么的?是任意的吗?您是否有认为它太慢的用户?从用户交互中开始或产生结果需要很长时间吗?

如果没有实际代码进行评估,就很难调试性能问题。以下是我的一些经验提示:

  1. 只创建一次注入(inject)器。我看到一个项目,他们为每个 REST 请求创建一个注入(inject)器,但它的性能很糟糕。当他们停止这样做时,他们的 API 速度提高了 15 倍。如果您需要通过代码创建多个注入(inject)器,我强烈建议您进行重构,这样您就不需要了。

  2. 单例可以提高性能,但不要滥用它。它们只创建一次,这可能会在您创建注入(inject)器(急切的单例)或对象图中的其他对象首次请求它们时发生。

  3. 了解 Guice 是一个基于反射的库,反射总是很慢。 Guice 在运行时速度非常快方面做得非常出色,但在创建注入(inject)器时会以大量反射为代价(请参阅第 1 项)。如果您在应用程序中看到明显的延迟,这可能意味着您做错了什么。

最后,如果您决定无法处理 Guice 的性能“问题”,您可以尝试替代方案,例如来自 Square 的 Dagger | (版本 1)和 Google (版本 2)。它使用代码生成而不是反射,因此您没有反射成本,但它的功能不够全面,也没有扩展。

关于java - 通用 Guice 性能指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795022/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com