Java Derleyicisi'nin perspicacity'sini kontrol etmeye karar verdim; bu yüzden basit bir sınıf yazdım.Java'da "if" koşullarının garip optimizasyonu
if (a == true) {}
ben sınıfını derlenmiş ve daha sonra javap
aracıyla sökülüp:
public class Foo {
public Foo(boolean a, int b) {
if (a == true && a != false) {
b = 1;
}
}
}
Ben derleyici gibi basit bir şey için durumu optimize edip merak ediyorum. Çıktıya baktığımda, gerçekten çok şaşırdım, çünkü derleyici, bu koşulların her ikisini de kontrol ediyor, aşağıda açıkça gösteriliyor. daha basit bir şey için optimize edilebilir zaman ben sadece merak ediyorum
Compiled from "Foo.java"
public class Foo {
public Foo(boolean, int);
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: iload_1
5: iconst_1
6: if_icmpne 15
9: iload_1
10: ifeq 15
13: iconst_1
14: istore_2
15: return
}
, neden, gereksiz komutları yerine getirmek edilir?
Yaygın kullanım durumu olması gerekmiyor. Derleyiciler, hiçbir anlam ifade etmeyen şeyleri derlemeyi ve engellemeyi amaçlar. – itachi
@itachi Gerçekten değil. Kod yazmanın birçok yolu vardır ve bunların tümü için yazım optimizasyonları derleyiciyi korumak ve hataları düzeltmek için zorlaştırır. – RealSkeptic
Minecraft'ı tamamen tersine çevirdikten sonra, Java'nın çok azını, varsa, semantik optimizasyonlar yaptığını rahatlıkla söyleyebilirim. – Qix