比构造函数更快?

时间:2012-02-27 21:43:52

标签: java performance constructor

我正在调整一些需要在匆忙中构建几千个对象的Java代码。我看过一些显而易见的事情,比如确保对象相当简单,构造函数是精简和平均的。而且我也在考虑没有某些对象等的选项。

我可以看一下具体的事情,以使构造函数本身花费更少的时间吗?是否有其他方法可以在不调用构造函数的情况下获取正确数量的对象,可能使用clone()或其他运行时API?或者是否有我可以给VM或编译器的提示,以帮助简化程序的这一部分?

5 个答案:

答案 0 :(得分:1)

最好的方法是尽可能避免创建对象。对象创建不仅会产生成本,而且垃圾收集器也会对其进行清理。

一些想法是:尝试将数据压缩为原始类型,用简单类型的预分配并行数组替换简单的类似结构的对象,使对象可变,重置它们并在它们不再存在时重新使用它们需要(使用池或ad-hoc),使用Javolution将类似结构的数据放入预先分配的ByteBuffers /数组中。如果必须创建新对象,请避免使用Java集合 - 它们会产生大量开销(包括内存使用和对象分配),请尝试使用数组或Trove。

也许你也可以简化你的逻辑,这样你就不需要这么多的对象了。

在任何情况下,运行性能分析,以便您知道正在优化哪个确实是您的瓶颈。通常情况下,表演热点位于与直觉不同的地方。

答案 1 :(得分:0)

您可以查看the flyweight模式以在对象之间共享一些数据。

答案 2 :(得分:0)

加速Java中对象创建开销的一种技术是在性能关键代码之前创建一个(空)对象池。然后,在您的关键代码中,您可以使用已构造的对象,而不必创建新的对象。

当然,您必须自己管理这个对象池的使用(记住哪些正在使用,哪些不在使用)。根据您的具体应用,这可能是微不足道的或更复杂的。

答案 3 :(得分:0)

尝试进行延迟初始化以设置可能不需要立即执行的对象状态。

答案 4 :(得分:0)

你可以并行,或者线程旋转/同步回管理系统的时间比你试图最小化的创建开销要长吗?