创建对象时 Java 速度慢吗?

th3*_*c0n 10 java oop performance new-operator object-construction

在我当前的项目(OpenGL 体素引擎)中,我在生成模型时遇到了一个严重的问题。我有一个非常面向对象的结构,这意味着即使我的顶点的单个参数也是Objects。这样我Object在大约 5 秒内为 750 个体素创建了大约 75000秒。Java 在分配 new 时真的这么慢,Object还是我错过了代码中某个地方的重大失败?

ven*_*iac 6

很大的问题。一般来说,它取决于对象类定义和构造对象所需的工作量。

一些问题:

  1. 避免终结方法,
  2. 调整内存和 GC 以避免过度的 GC 活动,
  3. 避免在构造函数中进行大的工作,
  4. 在对象构造期间不要使用同步调用,
  5. 使用弱引用

这些问题解决了我的问题。

另见http://oreilly.com/catalog/javapt/chapter/ch04.html

最后让我建议您使用(已弃用的)对象池模式或重用对象。

总结,不,一般来说,java对象创建并不慢


mer*_*ike 5

当然不是。以下代码分配了 1000 万个对象并将它们存储在一个数组中。在我 5 岁的笔记本上,它在 1.4 秒内完成。

public class Test {
    public static void main(String[] args) {
        Object[] o = new Object[10_000_000];
        long start = System.nanoTime();
        for (int i = 0; i < o.length; i++) {
            o[i] = new Object();
        }
        long end = System.nanoTime();
        System.out.println(Arrays.hashCode(o));
        System.out.println(new BigDecimal(end - start).movePointLeft(9));
    }
}
Run Code Online (Sandbox Code Playgroud)

...即使这个基准测试非常幼稚,因为它不会在启动计时器之前及时触发被测代码的编译。