在Java的String类中,trim方法包含:
int off = offset; /* avoid getfield opcode */
char[] val = value; /* avoid getfield opcode */
Run Code Online (Sandbox Code Playgroud)
我对评论"避免getfield操作码"感到有些困惑......
这是什么意思?(我认为这可以避免在字节码中使用getfield,但为什么这是一个Good Thing [TM]?)
难道是防止万一对象创建微调不会做任何事情(因此该返回)或?
所以我的问题是关于Java中的变量访问速度.今天在我的"CS"(如果你可以称之为)中,老师提出了类似下面的列表示例:
public class ListExample<T> {
private Node<T> head;
private Node<T> tail;
private class Node<T> { /* ... */ }
public void append(T content) {
if (!isEmpty()) {
Node<T> dummy = new Node<T>(content);
head = dummy;
tail = dummy;
head.setNext(head);
// or this
dummy.setNext(dummy);
} else { /* ... */ }
}
// more methods
// ...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:电话head.setNext(head)会慢dummy.setNext(dummy)吗?即使它不明显.我很想知道这个,因为head很明显,类的实例变量和虚拟是本地的,所以本地访问会更快吗?