我目前正在使用大量的嵌套级别对象,并且正在考虑性能。Java - 嵌套级别对象分配
所以我们可以说,我有以下类别:
class Address {
private String doorNumber;
private String street;
...
}
和其他类客户。
class Customer {
private List<Address> addressList;
private String firstName;
.....
.....
.....
}
,当我尝试访问它象下面这样:
public static void main(String[] str) {
Customer customer = new Customer();
// ... and add addresses to this Customer object.
// Set 1
// And if I then do...
customer.getAddressList().get(0).getHouseNumber();
customer.getAddressList().get(0).getStreet();
// OR
// Set 2
Address address = customer.getAddressList().get(0);
address.getHouseNumber();
address.getStreet()
}
我所知道的第一组线访问地址是不干净的代码,而我认为,编译器会排序了这一点,但它没有。因为当我反编译我的代码时,我得到了完全相同的东西,所以我不确定编译器是否在那里进行任何优化。所以我的第一个问题是编译器为什么不清理它并将其分配给一个临时变量?
而我的下一个问题是,这与性能有关吗?除了第一个不是非常干净的代码之外,哪一个是这两个代码中性能最好的代码。这是否意味着,我的第二套代码行将在编译期间内部翻译成第一行代码?
最后最后一个,调用类的变量比它的getter方法更优化吗?我只是在没有清晰编码的情况下考虑性能。
第二个版本性能会更好,尤其是当addressList是LinkedList <>或其他'List <>'其中'get'不是'O(1)'时。 (假设你会比第一个元素挖得更深。) – bradimus
Thanks @bradimus。我的想法是,我必须勤于变量赋值还是Java编译器要做什么优化?我不确定。 –
您可以通过基准测试来检查自己的表现。在循环中运行代码几次,然后用'System.nanoTime()'测量时间。 –