我有一个基于
openjdk-11
的 springboot 服务在生产环境中运行,该服务处理大量(每小时约 50K)的密集向量(或浮点数组)。由于性能问题,我对我的服务进行了 GC 调优分析,发现由于装箱值,List<Float>
消耗了过多的内存和 CPU。我尝试将其替换为 fastutil 的FloatArrayList
,它通过将处理延迟时间、CPU 和内存负载、GC 时间等减少约 20% 来解决问题。然后,我开始从所有最新的 Java 内置集合开源替代方案中搜索“原始类型的 ArrayList”操作的实时生产基准比较,以获得最佳性能、CPU 和内存使用情况、GC 使用情况等。
希望向广泛使用这些集合库(fastutil、eclipse-collections、hppc 等)的专家了解
Java Collections 框架 仅支持对象,而不支持基元。因此,对于数字,您只能使用包装类,例如
Float
类用于 float
原语。今天的情况就是这样,但是有一天可能会改变。
对象比对象更慢,并且占用更多内存。如果您的首要任务是性能或内存,那么您应该寻找使用原语而不是对象的替代方案。
在 Stack Overflow 上寻求软件推荐显然是偏离主题的。因此,如果您在选择这样一个面向原始的框架时寻求建议,请尝试在姊妹网站SoftwareRecommendationsStackExchange上发帖。但是,您需要非常具体地确定判断推荐是否成功的标准。