OpenJ9 - OpenJ9

Eclipse OpenJ9
Orijinal yazar (lar) IBM
Geliştirici (ler) Eclipse Vakfı
Kararlı sürüm
0.25.0 / 16 Mart 2021 ; 2 ay önce  ( 2021-03-16 )
Depo Bunu Vikiveri'de düzenleyin
Yazılmış C , C ++ , Java , derleme
İşletim sistemi Linux , AIX , Windows , macOS , z / OS , IBM i
Tür Java sanal makinesi
Lisans Apache Lisans 2.0

Eclipse Kamu Lisansı 2.0

GNU Genel Kamu Lisansı, GNU Sınıf Yolu İstisnası ile sürüm 2

GNU Genel Kamu Lisansı, OpenJDK Meclisi İstisnası ile sürüm 2
İnternet sitesi www .eclipse .org / openj9 /  Bunu Vikiveri'de düzenleyin

Eclipse OpenJ9 (önceki adıyla IBM J9 ), Java Virtual Machine Specification ile tamamen uyumlu , yüksek performanslı, ölçeklenebilir, Java sanal makinesi (JVM) uygulamasıdır.

OpenJ9, kaynaktan oluşturulabilir veya Linux ve Windows dahil olmak üzere bir dizi platform için AdoptOpenJDK projesinde bulunan önceden oluşturulmuş ikili dosyalar ile kullanılabilir . OpenJ9 ayrıca, WebSphere Application Server ve Websphere Liberty dahil olmak üzere birçok IBM ara yazılım ürününde yerleşik olan IBM geliştirici kitinin temel bir bileşenidir . OpenJ9 ayrıca Open Liberty'nin bir bileşenidir.

Kapsamlı yapılandırma seçenekleri, JVM'nin ana bilgisayar donanımında çalışan karmaşık kurumsal uygulamalardan konteyner tabanlı bulut hizmetlerinde çalışan kısa ömürlü uygulamalara kadar çok çeşitli Java uygulamalarının gereksinimlerini karşılayacak şekilde ayarlanabilmesini sağlar.

Tarih

OpenJ9 köklerini Object Technology International (OTI) tarafından geliştirilen ENVY / Smalltalk ürününe kadar izleyebilir . IBM , Smalltalk uzmanlığı ve ürünleri için 1996 yılında OTI'yi satın aldı . Bununla birlikte, Java dili Kurumsal pazar için lider bir dil olarak ortaya çıktığında, mevcut Smalltalk sanal makinesi bunun yerine Java bayt kodlarını işleyecek şekilde uyarlandı. J9 adı , Smalltalk kaynak kodu K8 için adlandırma kuralından türemiştir . K → J (geriye doğru bir adım) çünkü geliştiriciler Smalltalk'ın Java'dan daha iyi olduğuna inanıyorlardı, ancak 8 → 9 (ileri bir adım) çünkü yeni VM öncekinden daha iyi olacaktı.

J9 JVM, IBM'in Kurumsal ara katman yazılımlarının birçoğu için çalışma zamanı motoru haline geldi ve burada yüksek performans, ölçeklenebilirlik ve güvenilirlik açısından ün kazandı.

2017 yılında J9, Eclipse OpenJ9 adı altında Eclipse Foundation projesi oldu . IBM, projeye aktif olarak dahil olmaya ve bu Java sanal makinesini birçok yazılım teklifinin merkezine yerleştirmeye devam ediyor. Eclipse Foundation'da OpenJ9, bir kuluçka projesi olarak sınıflandırıldı ve ilk sürüm olan v0.8.0, 2018'de teslim edildi.

Özellikleri

Eclipse OpenJ9 JVM, Java JVM spesifikasyonu ile tamamen uyumludur. JVM'nin aynı sürümü, OpenJDK 8 ve sonraki sürümlerde kullanılabilir; bu, Java'nın farklı sürümlerinde çalışan uygulamalar tarafından birçok özellik ve iyileştirmeden yararlanılabileceği anlamına gelir. Oracle'ın HotSpot VM'si ile karşılaştırıldığında OpenJ9, benzer bir genel iş hacminde daha yüksek başlatma performansı ve daha düşük bellek tüketimi sunuyor.

Eclipse OpenJ9 yerleştirmeleri Eclipse OMR farklı programlama dilleri için inşa çalışma zamanı ortamları için kullanılabilir çekirdek çalışma zamanı bileşenleri içerir. OpenJ9 projesinde, fazladan bir kod katmanı, Java uygulamaları için bir çalışma zamanı ortamı sağlamak için dil semantiğini ekler.

Eclipse OpenJ9'u oluşturan bileşenler aşağıdaki bölümlerde açıklanmaktadır:

JIT derleyicisi

Just-In-Time (JIT), platformdan bağımsız Java bayt kodunu çalışma zamanında yerel makine koduna derleyerek Java uygulamalarının performansını artırır. Bir uygulama tarafından çağrılan her yöntem derlenmez. Bunun yerine OpenJ9, bir yöntemin kaç kez çağrıldığını kaydeder ve önceden tanımlanmış bir eşikte JIT derlemesini tetikler. JIT derleyicisi yöntemleri farklı optimizasyon düzeylerinde derler: soğuk , sıcak , sıcak , çok sıcak (profil oluşturma ile) veya kavurma . Optimizasyon seviyesi ne kadar yüksek olursa, beklenen performans o kadar iyi olur, ancak CPU ve bellek açısından maliyet o kadar yüksek olur. Daha yüksek optimizasyon seviyeleri, kaçış analizi ve kısmi artıklığın ortadan kaldırılması gibi özel teknikler kullanır veya belirli optimizasyon dizilerinde daha fazla döngü oluşturur. Bu teknikler daha fazla CPU ve bellek kullansa da, optimizasyonların sağladığı gelişmiş performans, takası değerli hale getirebilir.

AOT derleyici

Zamanın Öncesi (AOT) derlemesi, başlangıç ​​performansını iyileştirmek için bir mekanizmadır. Yöntemler, çalışma zamanında AOT kodunda dinamik olarak derlenir ve bu, JVM'nin bir uygulamayı daha hızlı başlatmasını sağlar. Sınıf veri paylaşımı kullanıldığında ( -Xshareclasses ) AOT otomatik olarak etkinleştirilir ve herhangi bir özel ayar gerektirmez. OpenJ9, büyük uygulamaların başlangıç ​​aşamasını tanımlayan sezgisel taramalara dayalı olarak hangi yöntemlerin derleneceğini otomatik olarak seçer. Küçük veya kısa çalışan uygulamalar için, AOT tarafından derlenen koddan en iyi şekilde yararlanmak için -Xtune: sanallaştırılmış seçeneği eklenmelidir.

Sınıf veri paylaşımı

JVM'ler arasında sınıf verilerini paylaşmanın iki ana faydası vardır:

  1. Başlangıç ​​performansı, bir uygulamanın başlatılırken ihtiyaç duyduğu sınıfları paylaşılan bir sınıf önbelleğine yerleştirerek iyileştirilir.
  2. Ayrı Java VM'lerinde çalışan uygulamalar arasında ortak sınıflar paylaşılarak bellek ayak izi azaltılır.

Diğer sınıf veri paylaşımı (CDS) uygulamalarından farklı olarak, özelliği OpenJ9'da etkinleştirmek yalnızca bir adım gerektirir: Uygulamanızı başlattığınızda komut satırında -Xshareclasses ayarlamak . OpenJ9 belirtildiğinde, sınıfları bellekte depolamak ve paylaşmak için bellek eşlemeli bir dosya oluşturur. Varsayılan olarak, OpenJ9 her zaman varsayılan sistem sınıfı yükleyici tarafından yüklenen hem önyükleme hem de uygulama sınıflarını paylaşır. OpenJ9 CDS uygulamasının bir başka yararı da önbelleğin dinamik olarak güncellenmesidir. Bu nedenle, bir uygulama yeni sınıflar yüklediğinde, JVM bunları herhangi bir kullanıcı müdahalesi olmadan otomatik olarak önbellekte depolar.

OpenJ9 ayrıca, sınıf paylaşımı desteğini özel sınıf yükleyicilerle tümleştirmek için genel bir Yardımcı API ve ayrıca etkin önbellekleri yönetmek için çeşitli yardımcı programlar sağlar.

Çöp toplayıcı

Uygulamaların hafızasının bitmesini önlemek için, Java yığınındaki artık gerekli olmayan nesnelerin geri kazanılması gerekir. Bu işlem, çöp toplama (GC) olarak bilinir . OpenJ9, farklı uygulama türleri ve iş yükleri etrafında tasarlanmış bir dizi çöp toplama ilkesi sağlar. Doğru politikayı seçmek, kullanım ve performans hedeflerine bağlıdır. Varsayılan olarak, OpenJ9 -Xgcpolicy:gencon kısa ömürlü birçok nesneye sahip işlem uygulamalarına en uygun olan Generational Concurrent ( ) ilkesini kullanır . Büyük Java yığınlarına sahip uygulamalara ( -Xgcpolicy:balanced ), yanıt süresine duyarlı uygulamalara ( -Xgcpolicy:metronome ) veya yüksek uygulama işleme hızı gerektiren uygulamalara ( ) hitap edenler dahil olmak üzere alternatif ilkeler mevcuttur -Xgcpolicy:optthruput .

Bir "boşta ayarlama" seçeneği ( -XX:+IdleTuningGcOnIdle ), uygulama boştayken OpenJ9'da çöp toplamayı tetikler. Bunu yapmak, bazı sanal barındırma faturalama planları için anlamlı olan bellek ayak izini azaltır .

JIT sunucusu

Ocak 2020'de OpenJ9, JIT kodunun JVM dışında ve uzaktan bir sunucuda derlenmesi için deneysel bir özellik sundu.

Teşhis bileşeni

OpenJ9, çalışma zamanı sorunlarını belirlemeye, izole etmeye ve çözmeye yardımcı olmak için kapsamlı izleme ve hata ayıklama yardımcı programları içerir. Belirli olaylar meydana geldiğinde varsayılan olarak farklı tipte tanılama verileri otomatik olarak üretilir, ancak komut satırından da tetiklenebilir. Veri türleri şunları içerir:

Java dökümleri
Bunlar, bir işletim sistemi sinyali, OutOfMemoryError istisnası veya kullanıcı tarafından başlatılan bir tuş vuruşu kombinasyonu nedeniyle JVM beklenmedik şekilde sona erdiğinde üretilir . Java dökümleri, JVM'nin bileşenleriyle ilgili bilgilerin çoğu ile olay gerçekleştiğinde JVM'nin durumunu özetler.
Yığın dökümleri
Yığın dökümleri, JVM bir OutOfMemoryError istisnası nedeniyle sona erdiğinde veya bir kullanıcı tarafından talep edildiğinde Java yığınındaki tüm canlı nesneleri gösterir . Bilgiler, nesne adresini, türü veya sınıf adını, boyutunu ve diğer nesnelere referansları içerir. Yığın dökümlerini analiz etmek, hangi nesnelerin Java yığınında büyük miktarda bellek kullandığını ve bunların neden çöp olarak toplanmadığını söyleyebilir.
Sistem dökümleri
Genellikle çekirdek dökümler olarak bilinen bunlar platforma özgüdür ve işlem belleğinin ham bir ikili dökümünü içerir. Bu döküm, uygulamadaki tüm Java nesnelerinin içeriği de dahil olmak üzere Java yığınının tam bir kopyasını içerir. Analiz için okunabilir bir biçime sistem dökümünü işlemek için OpenJ9 araçları mevcuttur.
Çöp toplama verileri
Çöp toplama sorunlarını analiz etmek için, başlatma, dünyayı durdurma işlemi, sonlandırma, referans işleme ve tahsis hataları dahil olmak üzere tüm çöp toplama işlemleri hakkında veri sağlayan ayrıntılı günlük kaydını etkinleştirebilirsiniz. Daha ayrıntılı analiz için çöp toplama izlemeyi açabilirsiniz.
İzleme verileri
OpenJ9 izleme olanağı, performans üzerinde minimum etkiyle uygulamaları, Java yöntemlerini veya dahili JVM işlemlerini izlemek için kullanılabilir.
JIT verileri
Genel bir koruma hatası veya iptal olayı meydana gelirse, JIT, temel nedeni belirlemeye yardımcı olmak için OpenJ9 geliştiricileri tarafından analiz edilebilecek küçük bir ikili döküm üretir.
Paylaşılan sınıf verileri
Paylaşılan sınıflar veri bileşeni, önbellek etkinliğini göstermek için çalışma zamanında kullanılabilecek bazı ayrıntılı seçenekler sağlar. PrintStats ve printAllStats yardımcı programları paylaşılan bir sınıf önbellek içeriğini analiz etmenizi sağlar.

Teşhis bileşeni ayrıca teşhis araçları oluşturmak için kullanılabilen DTFJ uygulama programlama arayüzünü de içerir. DTFJ, bir sistem dökümünden veya Java dökümünden gelen verilerle çalışır.

Benimseme

Ayrıca bakınız

Referanslar

Dış bağlantılar