Oluşturulan bytecode içinde ne yazıyor?

533388

Hectopat
Katılım
27 Mart 2022
Mesajlar
4.451
Makaleler
2
Çözümler
54
Örnek olarak javac komutu ile bir Java kodunu bytecode derlediğinde bu dosya nerede tutuluyor.
javac main.java dediğimizde bu arka tarafta Java compiler tarafından çevrildiğinde java Main yazıp çıktıyı ekran görüyoruz. Peki bu dosya .exe'ye mi çevrildi(class yazıyor.) Bir de bu dosya neden okunmuyor saçma sapen şeylerden oluşuyor?
@bitwise
 
Exe'ye niye dönüştürülsün? Byte kodunu yürüten Windows değil sanal makine ve neden okuyabileceğin şekilde anlamlı olsun? Sanal makinenin anlaması önemli senin değil. Okunabilir şekilde görmek istiyorsan javap kullanabilirsin.
 
Exe'ye niye dönüştürülsün? Byte kodunu yürüten Windows değil sanal makine ve neden okuyabileceğin şekilde anlamlı olsun? Sanal makinenin anlaması önemli senin değil. Okunabilir şekilde görmek istiyorsan javap kullanabilirsin.

Evet exeye değil de sanal makinenin anlayacağı bir class dosyasına dönüştürülüyormus galiba doğru mu?
 
Örnek olarak javac komutu ile bir Java kodunu bytecode derlediğinde bu dosya nerede tutuluyor.
javac main.java dediğimizde bu arka tarafta Java compiler tarafından çevrildiğinde java Main yazıp çıktıyı ekran görüyoruz. Peki bu dosya .exe'ye mi çevrildi(class yazıyor.) Bir de bu dosya neden okunmuyor saçma sapen şeylerden oluşuyor?
@bitwise

JVM'in anlayacagi sekilde yaziliyor. Decompiler ile orijinal haline yakin sekle donusturebilirsin.
Nerede tutuldugu nasil bir build mekanizmasi kullandigina gore degisir. Gradle, maven vs farkli metodlarla dosyaliyorlar.
JVM bu class dosyalarini executable hale donusturuyor AOT ya da JIT metodolojileri ile. (executable dan kast ettigim islemcide execute etmek, her class dosyasi OS acisindan executable olmayabilir )
Burada da hangi JVM i kullandigin ve nasil bir optimizasyon bekledigin devreye giriyor.
 
Jvm'in anlayacagi sekilde yaziliyor. Decompiler ile orijinal haline yakin sekle donusturebilirsin.
Nerede tutuldugu nasıl bir Build mekanizmasi kullandigina gore degisir. Gradle, maven vs farkli metodlarla dosyaliyorlar.
Jvm bu class dosyalarini executable hale donusturuyor aot ya da jıt metodolojileri ile. (executabledan kast ettigim islemcide execute etmek, her class dosyasi OS acisindan executable olmayabilir )
Burada da hangi jvm i kullandığın ve nasıl bir optimizasyon bekledigin devreye giriyor.

Teşekkür ederim son bir sorum daha var Java standart editions da sadece Java gradle ve maven kullanmadan bir proje oluşturduğumu varsayalım. Benim oluşturduğum main. Java isimli dosya main. Class adlı bir dosyaya derleniyor. Bunun yapılma sebebi Java sanal makinesinin anlıyacağı class yapısını mı oluşturmak?
 
Teşekkür ederim son bir sorum daha var Java standart editions da sadece Java gradle ve maven kullanmadan bir proje oluşturduğumu varsayalım. Benim oluşturduğum main. Java isimli dosya main. Class adlı bir dosyaya derleniyor. Bunun yapılma sebebi Java sanal makinesinin anlıyacağı class yapısını mı oluşturmak?

Evet, JVM bunu istiyor.
Sebebi de yazdigin kodu farkli cihazda calistirmana olanak saglamasi. ( Write once, run everywhere )
Ornegin gundelik bir JVM yazilim gelistirme dongusunde A makinesinde yazar, B makinesinde build eder ( compile edip + baska isler yapar ) ve bunu C makinesinde calistirirsin.
Bu mimari, bu ayrima olanak sagliyor.
 
Evet, jvm bunu istiyor.
Sebebi de yazdigin kodu farkli cihazda calistirmana olanak saglamasi. ( write once, run everywhere )
Ornegin gundelik bir jvm yazilim gelistirme dongusunde a makinesinde yazar, b makinesinde Build eder ( compile edip + baska isler yapar ) ve bunu C makinesinde calistirirsin.
Bu mimari, bu ayrima olanak sagliyor.

O zaman bir kere yaz her yerde çalıştır lafı buradan mı gwliyor?
 
O zaman bir kere yaz her yerde çalıştır lafı buradan mı gwliyor?
Evet, aynen oyle. Al yazdigin class dosyasini, JVM in oldugu her cihazda eger senin compile ettigin versiyona esit veya ustundeyse calistirabilirsin. Java gelistirilirken buna ek olarak backward compatibility de garanti ediyor.
 

Yeni konular

Geri
Yukarı