Ben örnek amacıyla basit bir sınıf var:Neden Java derleyici önemsiz bir yöntemi optimize etmiyor?
public class Test {
public int test1() {
int result = 100;
result = 200;
return result;
}
public int test2() {
return 200;
}
}
(javap -c Test.class
tarafından kontrol) derleyici tarafından üretilen bayt kodu şudur: Neden derleyici optimize etmemektedir
public int test1();
Code:
0: bipush 100
2: istore_1
3: sipush 200
6: istore_1
7: iload_1
8: ireturn
public int test2();
Code:
0: sipush 200
3: ireturn
test2
yöntemi için üretilen aynı bytecode için test1
yöntemi? En az 100
değerinin hiç kullanılmadığı sonucuna varmak için en azından result
değişkeninin sıfırdan başlatılmasını önlemeyi beklerim.
Bunu Eclipse derleyici ve javac
ile gözlemledim.
javac
sürümü: 1.8.0_72
, Java ile birlikte JDK bir parçası olarak yüklenir:
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)
* Java Dil Özellikleri * bu tür herhangi bir optimizasyon gerektirmez, bu nedenle "derleyici" hakkında sadece bir tane varmış gibi konuşmak anlamlı değildir. Hangi derleyiciyi kullandığınızı belirtmelisiniz. – ruakh
klasik cevap, optimizasyonların JVM'de yapılmasıdır (http://stackoverflow.com/questions/5981460/optimization-by-java-compiler) – wero
@ruakh İyi bir açıklama; derleyici bilgileri eklendi. –