JAVA - 指针追逐 - 最佳实践

时间:2017-04-20 21:54:43

标签: java performance pointers

我看过有人说我们应该尽可能地使用原语而不是对象。 原因是访问对象意味着使用指针,因此存在开销。

因此:

  • 如果有一个用SQL表映射的类(使用JPA),其中几个字段是Objects,因为数据库中存在潜在的空值(例如:Integer而不是int)
    • 我是否应该创建一个使用基元替换对象的母类,在可能的情况下使用固定值在我的应用中等效为null?(例如:-1而不是null)
    • 处理大量数据时使用的母班
    • 并且子类映射到数据库,仅在持久化数据时使用
    • 在子类中,我可以添加一些映射到列的方法,如下所示:
@Column("MY_COLUMN")
public Integer getId() {
    // super.getIdAsInt() returns a value of type int, the primitive.
    // -1 means value not set in my app.
    Integer result = (super.getIdAsInt() == -1) ? null : super.getIdAsInt();
    return result;
}

我认为这种模式也可以应用于子类关于持久化数据(进入数据库或XML文件,......)的任何情况,并且具有空值的字段是有意义的。

  • 您认为这些可能是提高应用程序性能的最佳做法吗?
  • 如果没有,你能举一些潜在的弊端吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

使用包装类的好处远远超过任何开销含义。对象可以在集合中使用,也可以为null。 NullPointerException比未初始化的原语导致的错误更容易调试。

此外,您提出的解决方案会给您和其他开发人员不希望在未来处理的应用程序增加不必要的复杂性。

这个问题is also discussed here

答案 1 :(得分:0)

您从数据库获取数据,这比指针追逐惩罚要长几个数量级。无论你获得什么,都可以忽略不计,并被getId使用条件和分配包装器的成本所抵消。你的非平凡的吸气剂可能会阻止内联,然后你会失去更多。

在多次使用大量原语的数字运算代码中,避免包装可能是必不可少的。对于大多数程序来说,这是非常无关紧要的。