如果在实现返回硬编码的getKind的方法与在实例化期间传入的Class.class之间存在任何显着的运行时性能差异时,我想知道何时实现返回类型的方法。
硬编码性能:
public static class HardcodedFoo {
public Class<Integer> getKind() {
return Integer.class;
}
}
与
在构造函数中传递类型的版本。
public static class Foo<E> {
private final Class<E> kind;
public Foo(final Class<E> kind) {this.kind = kind;}
public Class<E> getKind() {
return kind;
}
}
我知道在实例化中会有一些性能命中,因为我们需要传入一个字段以及Foo需要占用更多内存,但我高度怀疑是否存在任何重要的运行时性能(运行时性能只是看起来在内存中增加一个值,这是一直在发生的事情,因为我们没有在手机或任何东西上运行精确火箭,因此在内存中再查找一次就不会受到伤害。至少使用毫秒精度,我几乎找不到任何真正的差异。
为了真正证明第一种硬编码方法有什么不同吗?考虑到硬编码方法会导致设计涉及大量重复,而第二种方法我可以简化为单个类。
实际上,我认为实际使用的内存和性能损失并不像用于将所有重复类加载到JVM的permgen空间(或元空间)中的实际内存那样有影响力。或者其他什么。
答案 0 :(得分:2)
至少使用毫秒精度,我几乎找不到任何真正的差异。
您将需要纳秒精度或更高。即0.000001毫秒
主要区别在于您已注意到的是附加字段。这可能会对大小产生影响,但由于对象通常是8字节对齐而引用通常是4个字节,因此引用可能会消耗填充并且不会添加对象大小。
所涉及的内存访问可能会增加一些时间,但由于此点已访问此标头,因此可能会访问可能位于L1缓存中的其他字段。即它通常会增加〜1 ns。