首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为高性能数据结构(java)定义一组基本规则

为高性能数据结构(java)定义一组基本规则
EN

Stack Overflow用户
提问于 2011-11-17 20:36:09
回答 8查看 1.2K关注 0票数 11

我通常交替使用向量/arraylist、hashmap/treemaps和其他java集合,但有时需要函数API要求(例如,在某些情况下可能需要排序数据集)。

然而,最近我发现,对于我正在运行的一些算法,我需要将java性能提高到极限。

是否有一套用于高性能数据结构的指南,可以用作编码的基本规则?

我正在寻找一般规则,但在这种情况下,对以下问题的回答也可能非常有用:

1)什么时候应该使用多维数组而不是嵌套集合? 2)向量与ArrayLists --真的存在性能差异吗? 3)集合API(如Google的集合)、java技巧(如反射和转换)以及其他常见的java开发人员习语是否会在JVM负载过重时减慢JVM的速度? 4)在进行大量计算时,原语与常规对象(即双对象和双对象)是否会降低JVM的速度? 5)在java程序中处理需要高性能的大型集合时,是否还有其他重要的指导方针?

  • 注意:在这一点上,我不做任何多线程.我意识到,一旦我开始并行化,还有其他约束可能会适用。
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-17 20:48:25

所有的性能问题都应该首先通过分析(时间和内存/对象的使用)来解决。不要优化那些不是影响代码性能的因素。有了这个警告,有一些一般的经验规则(这都应该通过剖析来测试!)

1)什么时候应该使用多维数组而不是嵌套集合?

如果您不需要对集合进行动态调整,并且不需要将数据提供给任何需要集合的内容,那么多维数组(实际上是数组数组)就会更快。

2)向量与ArrayLists --真的存在性能差异吗?

是。向量机中的许多方法是同步的,这是很昂贵的。如果您不是多线程,那么避免向量。即使是这样,同步的粒度通常也是错误的,最好自己提供线程安全。

3)集合API(如Google的集合)、java技巧(如反射和转换)以及其他常见的java开发人员习语是否会在JVM负载过重时减慢JVM的速度?

反射速度慢;垃圾收集速度慢。任何你能避免的事情都会加快速度。

4)在进行大量计算时,原语与常规对象(即双对象和双对象)是否会减慢JVM的速度?

是。自动装箱/取消装箱可以非常快地创建大量垃圾。这一切都必须收集,这也会减慢你的程序。

5)对于处理java程序中需要高性能的大型集合,还有其他重要的指导方针吗?

喜欢局部方法变量而不是字段访问。通过搜索网页,你可以找到许多其他的指导方针。不过,最重要的是要分析一下。

编辑:有一套很好的性能提示这里

票数 9
EN

Stack Overflow用户

发布于 2011-11-17 20:39:51

要回答你是的话,双对双绝对会改变你的表演。

当您拥有由原语组成的集合时,当然可以使用由原语支持的集合,比如非常好的Trove。通过避免不断的原始对对象和反之亦然(Un)装箱,您节省了内存和宝贵的时间。

而且,到现在为止,向量类几乎已经成为过去了。

票数 8
EN

Stack Overflow用户

发布于 2011-11-17 20:46:02

1)如果您不需要真正的动态调整大小,或者您可以在一个足够小的“最大大小”容器中匹配您的数据,那么在从数组中随机访问时,您将比从集合中获得更好的性能,这是因为删除了方法调用开销,而且可能更多(取决于所使用的集合)。

2)在我看来,向量和哈希表几乎应该被看作是不受欢迎的。它们是“线程安全”,但是对于大多数真实的场景来说,仅仅让数据结构本身是线程安全是不够的;通常您的应用程序逻辑也必须是这种同步的一部分。ArrayList,HashMap会表现得更好,因为它们没有同步块,99.9%的时间都不会给您带来任何有用的东西。

3) Google的集合API很棒,没有真正的性能问题。反射绝对是缓慢的,不应该在内部循环中。

4)理想情况下,您希望避免对内部循环中的原语进行装箱/取消装箱。您可以找到专门调优到原语的集合(即。http://trove.starlight-systems.com/)。

5)这要视具体用途而定,我不会说有任何一般的指引。例如,当您将列表转换为一个集合或类似的东西时,请确保它不是在克隆您的整个集合。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8173938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档