it-swarm-tr.com

Tam zamanında bir (JIT) derleyicisi ne işe yarıyor?

Bir JIT derleyicisi, özellikle bir JIT dışı derleyicinin aksine ne yapar? Birisi açıklamayı özlü ve anlaşılır bir şekilde verebilir mi?

483
Michiel Borkent

Bir JIT derleyicisi çalışır sonra program başladı ve anında (ya da tam olarak adlandırıldığı gibi) anında kodu (genellikle bytecode veya bir çeşit VM talimatı) derler. ) genellikle daha hızlı olan, genellikle Ana Bilgisayar CPU'sunun yerel talimat setini oluşturan bir forma sokun. JIT, dinamik çalışma zamanı bilgilerine erişime sahipken standart bir derleyici sık kullanılan satır içi işlevler gibi daha iyi optimizasyonlar yapmaz ve geliştirebilir.

Bu, tümü makine diline kodunu derleyen geleneksel bir derleyicinin aksine önce program ilk çalıştırıldığında yapılır.

Başka bir deyişle, geleneksel derleyiciler tüm programı ilk çalıştırmadan ÖNCE bir EXE dosyası olarak oluştururlar. Daha yeni stil programları için, pseudocode (p-code) ile bir derleme oluşturulur. Yalnızca OS'de programı çalıştırdıktan SONRA (örneğin, simgesine çift tıklayarak) (JIT) derleyicisi devreye girecek ve Intel tabanlı işlemcinin ya da her neyin anlayacağı makine kodunu (m-kodu) üretecektir.

483
Mark Cidade

Başlangıçta, bir derleyici daha yüksek seviyeli bir dili (assembler'den daha yüksek bir seviye olarak tanımlanmış) nesne koduna (makine yönergeleri) dönüştürmekten sorumluydu, bu daha sonra bir linker ile çalıştırılabilir bir programa bağlanacaktı.

Dillerin gelişiminin bir noktasında, derleyiciler yüksek seviyeli bir dili sahte kod olarak derler ve bu da programınızı çalıştırmak için yorumlanır (bir tercüman tarafından). Bu, nesne kodunu ve çalıştırılabilir dosyaları elimine etti ve bu dillerin birden fazla işletim sistemine ve donanım platformuna taşınabilir olmasına izin verdi. Pascal (P-Kodunu derleyen) ilkilerden biriydi; Java ve C # daha yeni örneklerdir. Sonunda P-Code terimi bytecode ile değiştirildi, çünkü sahte işlemlerin çoğu byte uzunluğunda.

Just-In-Time (JIT) derleyicisi, çalışma zamanı yorumlayıcısının bir özelliğidir; bir yöntem her çağrıldığında bayt kodunu değiştirmek yerine, bayt kodunu çalışan makinenin makine kodu talimatlarında derler ve ardından bunu çağırır. bunun yerine nesne kodu. İdeal olarak, çalışan nesne kodunun etkinliği, programı her çalıştırıldığında yeniden derlemenin verimsizliğinin üstesinden gelecektir.

243
Craig Trader

JIT-Tam zamanında Sözün kendisi ihtiyaç duyulduğunda söyler (talep üzerine)

Tipik senaryo:

Kaynak kod tamamen makine koduna dönüştürülür

JIT senaryosu:

Kaynak kod [C # için ex IL (orta dil), Java için ByteCode] yapısı gibi Assembly diline dönüştürülür.

Ara kod, yalnızca gerekli kodları gerektiren uygulama gereksinimleri yalnızca makine koduna dönüştürüldüğünde makine diline dönüştürülür.

JIT vs JIT Dışı Karşılaştırma:

  • JIT'de tüm kodlar makine koduna dönüştürülmez, önce gerekli kodun bir kısmı makine koduna dönüştürülür, daha sonra, bir yöntem veya işlevsellik makine içinde değilse, makine koduna dönüştürülür ... CPU üzerindeki yük.

  • Makine kodu çalışma zamanında üretileceği için .... JIT derleyicisi, makinenin CPU mimarisini çalıştırmak için optimize edilmiş makine kodu üretecektir.

JIT Örnekleri:

  1. Java içinde JIT, JVM'de (Java Sanal Makinesi)
  2. C # içinde CLR (Ortak Dil Çalışma Zamanı) içinde
  3. Android içinde DVM'de (Dalvik Sanal Makinesi) veya ART (Android RunTime) yeni sürümlerindedir.
66
Durai Amuthan.H

Diğerlerinin dediğ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 işlevin kaç kez yürütüldüğünden sayımı tutar. Bu sayım önceden tanımlanmış bir limiti aşarsa, JIT, kodu doğrudan işlemci tarafından çalıştırılabilen makine dilinde derler (javacın kodu bytecode olarak derlediği normal durumun aksine ve Java - yorumlayıcı bu bayt kodunu yorumlar. satır satır satır makine koduna dönüştürür ve çalıştırılır).

Ayrıca, bir dahaki sefere bu fonksiyon hesaplanırsa, derlenmiş satır kod satır tekrar yorumlandığında normal yorumlamanın aksine, aynı derlenmiş kod çalıştırılır. Bu, yürütmeyi daha hızlı hale getirir.

25
Aniket Thakur

JIT derleyicisi ilk çalıştırmada yalnızca bayt kodunu eşdeğer yerel koda derler. Her art arda yürütmenin ardından JVM, performansı en iyi duruma getirmek için yalnızca derlenmiş yerel kodu kullanır.

enter image description here

JIT derleyicisi olmadan, JVM yorumlayıcısı yerel bir uygulama yürütülüyormuş gibi görünmesini sağlamak için bayt kodunu satır satır çevirir.

enter image description here

Kaynak

11
user8885515

Bayt kodu (mimari olarak nötr olan) Java derleyicisi tarafından üretildikten sonra, yürütme JVM (Java’da) tarafından gerçekleştirilecektir. Bayt kodu, yükleyici tarafından JVM'ye yüklenecek ve daha sonra her bir bayt komutu yorumlanacaktır.

Bir yöntemi birden çok kez çağırmamız gerektiğinde, aynı kodu birçok kez yorumlamamız gerekir ve bu gerekenden daha uzun sürebilir. Yani JIT (tam zamanında) derleyicimiz var. Bayt, JVM'ye yüklendiğinde (çalışma süresi), kodun tamamı yorumlanmak yerine derlenir, böylece zaman kazanılır.

JIT derleyicileri yalnızca çalışma süresinde çalışır, bu nedenle herhangi bir ikili çıktımız yoktur.

9
User

JIT Just-in-Time (Zamanında Durma) 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 kendi makineniz için optimize edilmiş bir kod üretebilir. Ortalama bir C derleyiciniz gibi statik bir derleyici, geliştiricinin makinesindeki çalıştırılabilir koda kodun tümünü derleyecektir. Dolayısıyla, derleyici bazı varsayımlara dayanarak optimizasyonlar gerçekleştirecektir. Daha yavaş derlenebilir ve daha fazla optimizasyon yapabilir, çünkü programın kullanıcı için yürütülmesini yavaşlatmadığından.

9
Brian Lyttle

Tam Zamanında Derleyici (JIT):
Java bytecode'ları bu CPU'nun makine talimatlarında derler.

Örneğin, Java kodumuzda bir döngü ifadesi varsa:

while(i<10){
    // ...
    a=a+i;
    // ...
 }

Eğer i değeri 0 ise yukarıdaki döngü kodu 10 kez çalışır.

Bayt kodunu tekrar tekrar 10 defa derlemeniz gerekmemektedir, çünkü aynı komut 10 defa uygulanacaktır. Bu durumda, bu kodu yalnızca bir kez derlemek gerekir ve bu değer gerekli sayıda değiştirilebilir. Böylece, Just In Time (JIT) Derleyici, bu tür ifadeleri ve yöntemleri izler (daha önce yukarıda belirtildiği gibi) ve daha iyi performans için bu tür bayt kodu parçalarını makine kodunda derler.

Benzer bir örnek, dizelerin/cümle listesinde "Normal İfade" kullanarak bir kalıp aramaktır.

JIT Derleyici tüm kodu makine koduna derlemez. Çalışma zamanında benzer bir düzende olan kodu derler.

Daha fazla bilgi için bu JIT'i anlama konusunda Oracle belgeleri bakın.

7
Anands23

Bunun eski bir iş parçacığı olduğunu biliyorum, ancak çalışma zamanı optimizasyonu, JIT derlemesinin burada ele alınmamış gibi görünen önemli bir parçası. Temel olarak, JIT derleyicisi yürütmeyi iyileştirmenin yollarını belirlemek için programı çalışırken izleyebilir. Sonra, çalışma anında bu değişiklikleri anında yapabilir. Google JIT optimizasyonu (javaworld'ün güzel bir bu konuda iyi bir makalesi var. )

4
eze

Bazı IL (orta dil) olarak tamamlanmış kodunuz var. Programınızı çalıştırdığınızda, bilgisayar bu kodu anlamıyor. Sadece yerel kodu anlıyor. Böylece JIT derleyicisi IL'nizi anında yerel kodla derler. Bunu yöntem düzeyinde yapar.

4
Charles Graham

Tam zamanında bir 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.

Fark derleyici, tercüman ve JIT

Genel olarak, kaynak kodunu makine koduna dönüştürmek istediğimizde istisnalar olmasına rağmen, aşağıdakileri kullanabiliriz:

  1. Derleyici: Kaynak kodu alır ve çalıştırılabilir bir dosya döndürür
  2. Tercüman: Program talimatını talimatlara göre yürütür. Kaynak kodun yürütülebilir bir bölümünü alır ve bu bölümü makine talimatına dönüştürür. Bu işlem, tüm kaynak kodları makine talimatlarına dönüştürülene ve yürütülene kadar tekrar edilir.
  3. JIT: Bir JIT'in birçok farklı uygulaması mümkündür, ancak bir JIT genellikle bir compliler ve bir tercümanın bir birleşimidir. JIT ilk önce yorum yoluyla makine diline aldığı aracı verileri (örneğin, Java bytecode) çevirir. Bir JIT, genellikle kodun belirli bir bölümünün sıkça yürütüldüğünü algılayabilir ve daha hızlı yürütmek için bu bölümü derler.
3

Jit tam zamanında duruyor, jit Java byte kodunu doğrudan işlemciye gönderilebilecek talimatlara dönüştüren bir program.

Belirli bir sistem platformunda Java tam zamanında derleyici (gerçekten ikinci bir derleyici) kullanarak, bayt kodunu belirli sistem koduna uyarlar, kod jit derleyicisi tarafından yeniden derlendiğinde, genellikle daha fazla çalışır. hızlıca bilgisayarda.

Tam zamanında bir derleyici sanal makineyle birlikte gelir ve isteğe bağlı olarak kullanılır. Bayt kodunu derhal yürütülen platforma özel yürütülebilir kodda derler.

2
user3459027

tam zamanında (JIT) derlemesi (ayrıca dinamik çeviri veya çalışma zamanı derlemesi), bir bilgisayar kodunu çalıştırmanın yol ki bu çalıştırma sırasında derlemeyi içerir = bir programın - çalışma zamanında - yürütmeden önce].

BT derlemesi bir [] kombinasyon makine koduna çeviriye verilen iki geleneksel yaklaşımdır - önceden yapılmış derleme (AOT) ve yorumlama - ve her ikisinin de bazı avantajlarını ve sakıncalarını birleştirir. JIT derlemesi, derlenmiş kodun hızını yorumlama esnekliği ile birleştirir.

JVM'de kullanılan JIT'i düşünelim,

Örneğin, HotSpot JVM JIT derleyicileri dinamik optimizasyonlar üretir. Başka bir deyişle, Java uygulaması çalışırken optimizasyon kararları veriyorlar ve yüksek performanslı yerel makine talimatları oluşturuyorlar temel sistem mimarisini hedef alıyorlar.

Derleme için bir yöntem seçildiğinde, JVM bayt kodunu Just-In-Time derleyicisine (JIT) gönderir. JIT, bytecode'un anlamını ve sözdizimini, yöntemi doğru şekilde derlemeden önce anlamalıdır. JIT derleyicisinin yöntemi analiz etmesine yardımcı olmak için, bytecode ilk önce makine kodunu bytecode'dan daha çok benzeyen izleme ağaçları adı verilen dahili bir temsilde yeniden biçimlendirilir. Analiz ve optimizasyonlar daha sonra metodun ağaçları üzerinde gerçekleştirilir. Sonunda, ağaçlar yerel koda çevrilir.

İzleme ağacı, çalışma zamanı programlama kodunun derlenmesinde kullanılan bir veri yapısıdır. İz ağaçları, sıcak noktalarda çalıştırılan kodları izleyen ve onu derleyen 'tam zamanında derleyici' türünde kullanılır. Bakınız b .

Bakın:

1
prime

JIT olmayan bir derleyici kaynak kodunu alır ve derleme zamanında makineye özgü bayt koduna dönüştürür. Bir JIT derleyicisi, derleme zamanında üretilen makine agnostik bayt kodunu alır ve çalışma zamanında makineye özgü bayt koduna dönüştürür. Java'ın kullandığı JIT derleyicisi, tek bir ikilinin değişiklik yapmadan çok sayıda platformda çalışmasına izin veren şeydir.

1
David

Aşağıdaki kod örnekleri, JIT’in Java kodunu nasıl optimize ettiğini gösterir.

Optimizasyon Öncesi Kod

    class A {
      B b;
      public void newMethod() {
        y = b.get();
        ...do stuff...
        z = b.get();
        sum = y + z;
      }
    }

class B {
   int value;
   final int get() {
      return value;
   }
}

Optimizasyondan Sonra Kod

class A {
B b;
public void newMethod() {
   y = b.value;
   ...do stuff...
   sum = y + y;
}
}
class B {
   int value;
   final int get() {
      return value;
   }
}

Başlangıçta, kod b.get () yöntemine iki çağrı içeriyordu. Optimizasyondan sonra, iki yöntem çağrısı tek bir değişken kopya işleminde optimize edilir; yani, optimize edilmiş kodun B sınıfı alan değerini elde etmek için bir yöntem çağrısı gerçekleştirmesi gerekmez.

1

Bir JIT derleyicisi kullanılarak, Java kaynak kodu Java bayt koduna (. Sınıf dosyaları) dönüştürülür. Bu yapıldıktan sonra, JVM .class dosyalarını çalışma zamanında yükler ve onları bir tercüman kullanarak makinenin anlaşılabilir koduna dönüştürür.

JIT derleyicisi, JVM'nin, etkinleştirildiğinde JVM'nin bayt kodundaki çağrıları yapılan yöntemi analiz etmesini ve bunları daha doğal ve verimli bir kodla derlemesini sağlayan bir özelliktir. JIT, öncelikli yöntem çağrılarını bu noktada optimize eder.

Bu yöntem çağrıları derlendikten sonra, JVM daha sonra yürütmenin performansını arttırması muhtemel olan yorumlamak yerine bu optimize edilmiş kodu çalıştırır.

program çalıştırıldığında her seferinde kaynak kodu derlemek zorunda olan sıradan derleyici yerine

0
sabeen kanwal

JVM aslında performans nedeniyle çalışma zamanı sırasında derleme adımları gerçekleştirir. Bu, Java temiz bir derleme-yürütme ayrımına sahip olmadığı anlamına gelir. İlk önce Java kaynak kodundan bytecode 'a statik bir 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ıkla çalıştırıldığını ölçer ve çok sık çalıştırılan bir kodun "sıcak noktası" algıladığında, bayt kodundan "sıcak nokta" kodunun makine koduna (sıcak nokta profil oluşturucusu) kadar dinamik derleme yapar. Yani bugün etkili bir şekilde Java programları makine kodu çalıştırma tarafından çalıştırılıyor.

0
hi.nitish

Bayt kodunun% 20’si zamanın% 80’i JIT derleyicisi bu istatistikleri alır ve satır içi yöntemler ekleyerek, kullanılmayan kilitleri kaldırarak vb. Ve aynı zamanda bu makineye özgü bayt kodunu oluşturarak daha hızlı çalışacak şekilde bayt kodunun% 20'sini optimize eder. Bu makaleden alıntı yapıyorum, kullanışlı olduğunu gördüm. http://Java.dzone.com/articles/just-time-compiler-jit-hotspot

0
Santosh budhe

JIT, birkaç JVM uygulamasında, daha hızlı ancak daha fazla bellek gerektiren bir uygulamada çalıştırma motoruna atıfta bulunuyor. Bu şemada, bir yöntemin bayt kodları, yöntem ilk başlatıldığında yerel makine koduna derlenir. Yöntemin yerel makine kodu daha sonra önbelleğe alınır, böylece aynı yöntemin bir sonraki başlatılışında yeniden kullanılabilir.