In dieser Diskussion über die Performance-Overhead der Verwendung reflection verwenden, heißt es:Welche Art von Laufzeitoptimierungen gehen verloren, wenn wir Reflexion
Verwendung von Reflexion einiger Laufzeitoptimierungen verloren verursachen. Beispielsweise wird der folgende Code sehr wahrscheinlich durch eine virtuelle Java-Maschine optimiert werden:
int x = 1; x = 2; x = 3;
Equivalent Code Field.set * mit() nicht.
Ohne Reflektion, welche Art von Laufzeitoptimierungen würde JVM vornehmen?
Es würde einfach 'x = 3' laufen. Alle Arten von Inlining-Tricks, Opcode-Eliminierung usw. verschwinden, wenn Sie Reflektion in den Mix werfen. –
Das ist eine interessante Frage, aber ich denke, es ist zu breit für eine einzige SO-Frage. – chrylis
Die Zuweisungen zu x tun nichts. Es ist eine lokale Variable, kein Multi-Thread, keine Parallelität und kann entfernt werden. Wenn Sie Field.set verwenden, kann ein anderer Thread Zugriff auf die Variable haben, so dass sie niemals optimiert werden kann. Das ist was ich denke. –