Bir JIT derleyicisi, JIT olmayan bir derleyicinin aksine özellikle ne yapar? Birisi kısa ve anlaşılması kolay bir açıklama yapabilir mi?
Bir JIT derleyicisi, JIT olmayan bir derleyicinin aksine özellikle ne yapar? Birisi kısa ve anlaşılması kolay bir açıklama yapabilir mi?
Yanıtlar:
Bir JIT derleyicisi , program başladıktan sonra çalışır ve kodu (genellikle bayt kodu veya bir çeşit VM talimatı) anında (veya tam zamanında çağrıldığında) genellikle daha hızlı olan bir forma derler. komut seti. JIT, dinamik çalışma zamanı bilgilerine erişirken, standart bir derleyici sık kullanılan satır içi işlevler gibi daha iyi optimizasyonlar yapmaz ve daha iyi optimizasyonlar yapabilir.
Bu, program ilk çalıştırmadan önce tüm kodu makine diline derleyen geleneksel bir derleyicinin aksine .
Paraphrase için, geleneksel derleyiciler tüm programı ilk çalıştırmadan ÖNCE bir EXE dosyası olarak oluşturur. Daha yeni stil programları için sözde kod (p-kodu) ile bir derleme oluşturulur. Programı yalnızca işletim sisteminde yürüttüğünüz SONRA (örn., Simgesine çift tıklayarak) (JIT) derleyici devreye girecek ve Intel tabanlı işlemcinin veya anlayacağı her şeyin makine kodunu (m kodu) oluşturacaktır.
Başlangıçta, bir derleyici, üst düzey bir dili (montajcıdan daha yüksek seviye olarak tanımlanır) nesne koduna (makine talimatları) dönüştürmekten sorumluydu; bu daha sonra (bir bağlayıcı tarafından) yürütülebilir bir dosyaya bağlanacaktı.
Dillerin evriminin bir noktasında, derleyiciler, daha sonra programınızı çalıştırmak için yorumlanacak (bir tercüman tarafından) sözde koda yüksek seviyeli bir dil derleyecektir. Bu, nesne kodunu ve yürütülebilir dosyaları ortadan kaldırdı ve bu dillerin birden fazla işletim sistemine ve donanım platformuna taşınabilir olmasını sağladı. Pascal (P-Code'a derlenen) ilklerden biriydi; Java ve C # daha yeni örneklerdir. Sonuç olarak, sözde işlemlerin çoğu bayt uzunluğunda olduğu için P-Code terimi bayt kodu ile değiştirildi.
Just-In-Time (JIT) derleyicisi, çalışma zamanı yorumlayıcısının, bir yöntem her çağrıldığında bayt kodunu yorumlamak yerine, bayt kodunu çalışan makinenin makine kodu yönergelerinde derleyeceği ve bunu çağıracağı bir özelliktir. bunun yerine nesne kodu. İdeal olarak, nesne kodunun çalıştırılmasının etkinliği, programı her çalıştığında yeniden derlemenin verimsizliğinin üstesinden gelecektir.
JIT-Tam zamanında kelimenin kendisi ne zaman gerekli olduğunu söyler (istek üzerine)
Kaynak kodu tamamen makine koduna dönüştürülür
Kaynak kodu, yapı [örneğin C # için IL (ara dil için), java için ByteCode] gibi montaj diline dönüştürülecektir.
Ara kod, yalnızca uygulama için gereken kodlar yalnızca makine koduna dönüştürüldüğünde makine diline dönüştürülür.
JIT'de tüm kod makine koduna dönüştürülmez, ilk önce gerekli olan kodun bir kısmı makine koduna dönüştürülecektir, daha sonra çağrılan bir yöntem veya işlevsellik makinede değilse, makine koduna dönüştürülecektir ... CPU yükü.
Makine kodu çalışma zamanında üretileceğinden ... JIT derleyicisi, makinenin CPU mimarisini çalıştırmak için optimize edilmiş makine kodu üretir.
Diğerlerinin de belirttiği gibi
JIT, Tam Zamanında anlamına gelir; bu, kodun çalışma zamanından önce değil gerektiğinde derlendiği anlamına gelir.
Sadece yukarıdaki tartışmaya bir nokta eklemek için JVM bir fonksiyonun kaç kez yürütüldüğünü saymaktadır. Bu sayı önceden tanımlanmış bir sınırı aşarsa, JIT kodu doğrudan işlemci tarafından çalıştırılabilen makine diline derler (javac'ın kodu bayt koduna ve sonra java'ya derlediği normal durumun aksine - yorumlayıcı bu bayt kod satır satır çevirir makine kodu ve yürütür).
Ayrıca bu fonksiyon bir daha hesaplandığında, kodun tekrar satır satır yorumlandığı normal yorumlamanın aksine aynı derlenmiş kod tekrar yürütülür. Bu, yürütmeyi daha hızlı hale getirir.
JIT derleyicisi, bayt kodunu yalnızca ilk yürütme sırasında eşdeğer yerel koda derler. Art arda yapılan her yürütmede JVM, performansı optimize etmek için yalnızca önceden derlenmiş yerel kodu kullanır.
JIT derleyicisi olmadan, JVM yorumlayıcısı bayt kodunu satır satır çevirerek yerel bir uygulamanın yürütülüyormuş gibi görünmesini sağlar.
JIT, Tam Zamanında anlamına gelir; bu, kodun çalışma zamanından önce değil gerektiğinde derlendiği anlamına gelir.
Bu yararlıdır, çünkü derleyici makineniz için optimize edilmiş kod üretebilir. Statik bir derleyici, ortalama C derleyiciniz gibi, tüm kodları geliştiricinin makinesindeki yürütülebilir koda derler. Böylece derleyici bazı varsayımlara dayalı optimizasyonlar yapacaktır. Daha yavaş derlenebilir ve daha fazla optimizasyon yapabilir, çünkü programın kullanıcı için yürütülmesini yavaşlatmaz.
Java derleyicisi tarafından (mimari nötr olan) bayt kodu oluşturulduktan sonra, yürütme JVM (Java'da) tarafından işlenir. Bayt kodu yükleyici tarafından JVM'ye yüklenecek ve daha sonra her bayt talimatı yorumlanacaktır.
Bir yöntemi birden çok kez çağırmamız gerektiğinde, aynı kodu birçok kez yorumlamamız gerekir ve bu işlem gerektiğinden daha fazla zaman alabilir. Yani JIT (tam zamanında) derleyicileri var. Bayt JVM'ye (çalışma süresi) yüklendiğinde, kodun tamamı yorumlanmak yerine derlenecek ve böylece zamandan tasarruf edilecektir.
JIT derleyicileri sadece çalışma zamanında çalışır, bu nedenle herhangi bir ikili çıkışımız yoktur.
Tam Zamanında Derleyici (JIT):
Java bayt kodlarını ilgili CPU'nun makine talimatlarında derler.
Örneğin, java kodumuzda bir döngü ifadesi varsa:
while(i<10){
// ...
a=a+i;
// ...
}
İ'nin değeri 0 ise yukarıdaki döngü kodu 10 kez çalışır.
Bayt kodunu tekrar tekrar 10 kez derlemeye gerek yoktur, çünkü aynı talimat 10 kez yürütülür. Bu durumda, bu kodu yalnızca bir kez derlemek gerekir ve değer gerekli sayıda değiştirilebilir. Bu nedenle, Tam Zamanında (JIT) Derleyici bu tür ifadeleri ve yöntemleri (daha önce yukarıda belirtildiği gibi) izler ve daha iyi performans için bu bayt kodu parçalarını makine kodunda derler.
Bir başka benzer örnek, dizeler / cümleler listesindeki "Normal İfade" kullanarak bir model aramasıdır.
JIT Derleyicisi tüm kodu makine koduna derlemez. Çalışma zamanında benzer bir desene sahip olan kodu derler.
Daha fazla bilgi için JIT'i Anlama hakkındaki bu Oracle belgelerine bakın .
Bazı IL (ara dil) içine derlenmiş kodunuz var. Programınızı çalıştırdığınızda, bilgisayar bu kodu anlamıyor. Yalnızca yerel kodu anlar. Böylece JIT derleyicisi IL'nizi anında yerel koda derler. Bunu yöntem düzeyinde yapar.
Bu eski bir iş parçacığı olduğunu biliyorum, ama çalışma zamanı optimizasyonu burada tartışılan görünmüyordu JIT derleme başka önemli bir parçasıdır. Temel olarak, JIT derleyicisi yürütme geliştirmek için yollar belirlemek için çalışırken programı izleyebilirsiniz. Ardından, çalışma sırasında bu değişiklikleri anında yapabilir. Google JIT optimizasyonu (javaworld'ün bu konuda oldukça iyi bir makalesi var. )
Tam zamanında derleyici (JIT), çalıştırılamayan bir girdi alan ve yürütülecek uygun makine kodunu döndüren bir yazılım parçasıdır. Örneğin:
Intermediate representation JIT Native machine code for the current CPU architecture
Java bytecode ---> machine code
Javascript (run with V8) ---> machine code
Bunun sonucu, belirli bir CPU mimarisi için uygun JIT derleyicisinin kurulması gerektiğidir.
Kaynak kodunu makine koduna dönüştürmek istediğimizde genel olarak istisnalar olabilir, ancak şunları kullanabiliriz:
Jit tam zamanında derleyicidir jit, java bayt kodunu doğrudan işlemciye gönderilebilen talimatlara dönüştüren bir programdır.
Java'yı tam zamanında derleyici (gerçekten ikinci bir derleyici) kullanarak belirli bir sistem platformunda bayt kodunu belirli sistem koduna uyarlar, kod jit karşılaştırıcısı tarafından yeniden derlendikten sonra, genellikle bilgisayarda daha hızlı çalışır.
Tam zamanında derleyici sanal makine ile birlikte gelir ve isteğe bağlı olarak kullanılır. Bayt kodunu, derhal yürütülen platforma özgü yürütülebilir kodda derler.
Sadece-zamanında (tam zamanında) derleme, (dinamik için veya çalışma zamanı derleme), a, bilgisayar programı yürütme şekli yürütülmesi sırasında derleme içeren çalışma zamanında - - bir programın yerine yürütülmesinden önce .
BT derlemesi, makine koduna çeviriye yönelik iki geleneksel yaklaşımın - vaktinden önce derleme (AOT) ve yorumlama - birleşimidir ve her ikisinin de bazı avantajlarını ve dezavantajlarını birleştirir. JIT derlemesi derlenmiş kodun hızını yorumlama esnekliği ile birleştirir .
JVM'de kullanılan JIT'i ele alalım,
Örneğin, HotSpot JVM JIT derleyicileri dinamik optimizasyonlar üretir. Başka bir deyişle, Java uygulaması çalışırken optimizasyon kararları verir ve yüksek performanslı yerel makine talimatları oluşturur verir ve temel sistem mimarisini hedefleyen .
Derleme için bir yöntem seçildiğinde, JVM bayt kodunu Just-In-Time derleyicisine (JIT) besler. JIT, yöntemi doğru bir şekilde derlemeden önce bayt kodunun anlambilimini ve sözdizimini anlamalıdır. JIT derleyicisinin yöntemi analiz etmesine yardımcı olmak için, bayt kodu ilk olarak izleme kodları adı verilen ve makine kodunu bayt kodundan daha yakından benzeyen dahili bir sunumda yeniden formüle edilir. Analiz ve optimizasyonlar daha sonra yöntemin ağaçları üzerinde gerçekleştirilir. Sonunda, ağaçlar yerel koda çevrilir.
İzleme ağacı, programlama kodunun çalışma zamanı derlemesinde kullanılan bir veri yapısıdır. İzleme ağaçları, sıcak noktalar sırasında kod yürütülmesini izleyen ve derleyen bir tür 'tam zamanında derleyicide' kullanılır. Bakın bu .
Bakınız:
JIT olmayan bir derleyici kaynak kodunu alır ve derleme sırasında makineye özel bayt koduna dönüştürür. Bir JIT derleyicisi, derleme zamanında oluşturulan makine agnostik bayt kodunu alır ve çalışma zamanında makineye özgü bayt koduna dönüştürür. Java'nın kullandığı JIT derleyicisi, tek bir ikilinin çok sayıda platformda değişiklik yapmadan çalışmasına izin veren şeydir.
Bayt kodunun% 20'si zamanın% 80'ini kullanır. JIT derleyicisi bu istatistikleri alır ve satır içi yöntemleri ekleyerek, kullanılmayan kilitleri kaldırarak vb. Ve bu makineye özgü bayt kodunu oluşturarak bayt kodunun bu% 20'sini daha hızlı çalışacak şekilde optimize eder. Bu makaleden alıntı yapıyorum, kullanışlı olduğunu buldum. http://java.dzone.com/articles/just-time-compiler-jit-hotspot
JIT, birkaç JVM uygulamasında, daha hızlı ancak daha fazla bellek gerektiren bir yürütme motorunu tam zamanında kullanan bir derleyicidir. Bu şemada, bir yöntemin bayt kodları, yöntemin ilk çağrılmasında yerel makine koduna derlenir. Daha sonra yöntemin yerel makine kodu önbelleğe alınır, böylece aynı yöntem bir sonraki çağrıldığında tekrar kullanılabilir.
JVM aslında performans nedenleriyle çalışma zamanı sırasında derleme adımları gerçekleştirir. Bu, Java'nın temiz bir derleme yürütme ayrımına sahip olmadığı anlamına gelir. İlk olarak Java kaynak kodundan bayt koduna statik derleme yapar. Sonra bu bayt kodu yürütme için JVM'ye geçirilir. Ancak bayt kodunun yürütülmesi yavaştır, bu nedenle JVM, bayt kodunun ne sıklıkta çalıştırıldığını ölçer ve çok sık çalışan bir "hotspot" kodu algıladığında, bayt koddan "hotspot" kodunun (hotspot profiler) makine koduna kadar dinamik derleme gerçekleştirir. Bu nedenle, günümüzde Java programları makine kodu yürütme ile çalıştırılmaktadır.
JIT derleyicisi olarak da bilinen Just In Time derleyicisi Java'da performans iyileştirmesi için kullanılır. Varsayılan olarak etkindir. Derleme, daha erken yürütme zamanında yapılır. Java, JIT derleyicisinin kullanımını JVM'ye dahil ederek popüler hale getirdi.