JVM bilgi noktalarına genel bakış: kıdemli Java mühendisi görüşmeleri için gereklidir

Yazar | Zheng Yudi

Kaynak | Geek Time "Java Sanal Makinesinin Derinlemesine Sökülmesi"

Aşağıdaki makale Ali, Meituan ve Oracle gibi büyük üreticilerin JVM test sitelerini bir araya getiriyor. Cevap verebilir misiniz?

  • Java sanal makinesi nedir? Java neden "platformdan bağımsız programlama dili" olarak adlandırılıyor?

  • Java kodu nasıl çalışır?

  • Java sanal makinesi Java sınıflarını nasıl yükler?

  • JVM çalışan belleğin sınıflandırılması

  • JVM yığın içi ve yığın dışı bellek kullanımı nasıl izlenir ve teşhis edilir?

  • Java'nın dört referansı nedir?

  • Yerleşik JVM derlemesi veya GC günlüğü nasıl anlaşılır?

  • JVM'nin kalıcı olarak oluşturulmasında çöp toplama gerçekleşecek mi?

  • Java'daki iki istisna türü nelerdir? Onların arasındaki fark ne?

  • JVM senkronizasyonu nasıl sağlar?

  • Java'nın dahili modeli nedir?

  • Derleyicinin herhangi bir optimizasyonu olsa bile?

  • Hangi koşullar altında tekrarlanan okuma ve yazma işlemleri optimize edilecek?

  • Ne tür çöpler geri dönüştürülür?

  • Ne zaman çöp toplamaya neden olur?

  • Java programlarını izlemek için JFR ve JMC nasıl kullanılır?

  • JVM kontrolünü atlamak için Güvenli Olmayan API nasıl kullanılır?

  • Mevcut kodu beslemek için bayt kodu enjeksiyonu nasıl kullanılır?

  • ...

  • Görüşmedeki herkese yardımcı olmayı umarak yanıtlamak için birkaç soru seçtim.

    1. Java sanal makinesi nedir? Java neden "platformdan bağımsız programlama dili" olarak adlandırılıyor?

    Java sanal makinesi, Java bayt kodunu çalıştırabilen bir sanal makine işlemidir. Java kaynak dosyaları, Java sanal makinesi tarafından yürütülebilen bayt kodu dosyalarına derlenir.

    Java, programcıların her platformu ayrı ayrı yeniden yazmasına veya yeniden derlemesine gerek kalmadan uygulamaların herhangi bir platformda çalışmasına izin verecek şekilde tasarlanmıştır. Java Sanal Makinesi, temel donanım platformunun komut uzunluğunu ve diğer özelliklerini bildiği için bunu mümkün kılar.

    2. Java kodu nasıl çalışır?

    Bu soru üç kısımda cevaplanabilir:

  • Java neden sanal bir makinede çalışıyor?

  • Java sanal makinesi Java bayt kodunu nasıl çalıştırır?

  • Java sanal makinesinin işletim verimliliği nedir?

  • Java, taşınabilirlik sağladığı için sanal bir makinede çalışır. Java kodu, Java bayt kodu olarak derlendiğinde, farklı platformlardaki Java sanal makine uygulamalarında çalıştırılabilir. Ek olarak, sanal makine ayrıca bellek yönetimi gibi bazı uzun ve hataya açık işlemlerle uğraşmak yerine bir kod barındırma ortamı sağlar.

    Java sanal makinesi, çalışma zamanı bellek alanını yöntem alanı, yığın, PC kaydı, Java yöntem yığını ve yerel yöntem yığını olmak üzere beş bölüme ayırır. Java programı tarafından derlenen sınıf dosyasının, Java sanal makinesinde çalıştırılmadan önce yöntem alanına yüklenmesi gerekir.

    İşletim verimliliğini artırmak için, standart JDK'daki HotSpot sanal makinesi karma bir yürütme stratejisi benimser. İlk olarak, Java bayt kodunu yorumlar ve yürütür ve daha sonra içinde tekrar tekrar çalıştırılan sıcak kodu bir yöntem temelinde derler, bunu makine koduna çevirir ve doğrudan temeldeki donanım üzerinde çalıştırır. HotSpot, oluşturulan kodun derleme süresi ve yürütme verimliliği arasında bir denge kurmak için birkaç farklı tam zamanında derleyici ile yüklenir.

    3. Java sanal makinesi Java sınıflarını nasıl yükler?

    Bayt akışını Java sanal makinesi tarafından Java sınıflarına dönüştürme işlemi üç adıma ayrılabilir: yükleme, bağlama ve başlatma. Java sanal makinesinde sınıf yüklemesini karşılaştırmak için bir ev de oluşturabilirsiniz.

    Yükleme, bir bayt akışı bulma ve buna dayalı bir sınıf oluşturma sürecini ifade eder. Örnek olarak bir ev inşa etmeyi ele alalım: Köydeki Tony bir ev inşa etmek istiyor, bu yüzden sürece göre önce bir mimar bulmalı ve ona "bir oda, bir oturma odası, dört banyo" gibi bir ev tipi tasarlamak istediğini söylemelidir. Buradaki oda tipi sınıfa eşdeğerdir ve mimar, sınıf yükleyiciye eşdeğerdir. Köyde pek çok mimar var, bunlar kesinlikle hiyerarşiktir, ancak önyükleme sınıfı yükleyici adı verilen ortak bir ataları vardır.

    Yükleme, bir sınıf yükleyicinin yardımını gerektirir.Java sanal makinesinde, sınıf yükleyici bir üst yetki verme modelini kullanır, yani, bir yükleme talebi alındığında, istek ilk olarak üst sınıf yükleyiciye iletilir.

    Bağlama, oluşturulan sınıfın yürütülebilmesi için Java sanal makinesiyle birleştirme sürecini ifade eder. Bağlantı üç aşamaya ayrılmıştır: doğrulama, hazırlık ve analiz. Bunların arasında ayrıştırma aşaması isteğe bağlıdır.

    Başlatma, sabit değerler olarak işaretlenmiş alanlara değerler atamak ve

    JVM içeriği hakkında daha fazla bilgi edinmek istiyorsanız, siteme abone olabilirsiniz. "Java sanal makinesinin derinlemesine demontajı" Sütun.

    4. JVM in-heap ve off-heap bellek kullanımı nasıl izlenir ve teşhis edilir?

    JVM belleğini anlamanın birçok yolu vardır ve belirli yetenekler de farklıdır.Kısa bir özet aşağıdaki gibidir:

    JConsole, VisualVM gibi kapsamlı grafik araçları kullanabilirsiniz (Oracle JDK 9'dan itibaren VisualVM artık JDK kurulum paketine dahil değildir) ve benzeri. Bu araçların kullanımı nispeten sezgiseldir, doğrudan Java sürecine bağlanır ve ardından grafik arayüzde bellek kullanımını kavrayabilirsiniz. Örnek olarak JConsole alırsak, bellek sayfası ortak yığın belleğini ve çeşitli yığın dışı parçaların kullanım durumunu görüntüleyebilir.

    Ayrıca çalışma zamanı sorgusu için komut satırı araçlarını da kullanabilirsiniz. Jstat ve jmap gibi araçlar, yığın ve yöntem alanı gibi kullanım verilerini görüntülemek için bazı seçenekler sunar.

    Alternatif olarak, bir Yığın Dökümü dosyası oluşturmak için jmap gibi komutları kullanabilir ve ardından ayrıntılı analiz için jhat veya Eclipse MAT gibi bir yığın dökümü analiz aracı kullanabilirsiniz.

    Tomcat ve Weblogic gibi Java EE sunucularını kullanıyorsanız, bu sunucular aynı zamanda bellek yönetimi ile ilgili işlevleri de sağlar.

    Ek olarak, bir dereceye kadar, GC günlükleri ve diğer çıktılar da zengin bilgiler içerir.

    Burada göreceli olarak özel bir bölüm var, yani yığın dışı bellekteki doğrudan bellek. Önceki araçlar temelde uygulanamaz. JVM yerel bellek ayırma perspektifinden yorumlanacak olan JDK ile birlikte gelen Yerel Bellek İzleme (NMT) özelliğini kullanabilirsiniz. .

    5. JVM'nin kalıcı olarak oluşturulmasında çöp toplama gerçekleşecek mi?

    Kalıcı üretimde çöp toplama gerçekleşmez Kalıcı nesil doluysa veya kritik değeri aşarsa, tam bir çöp toplama (Tam GC) tetiklenir. Çöp toplayıcının çıktısına yakından bakarsanız, kalıcı neslin de toplandığını göreceksiniz. Tam GC'den kaçınmak için doğru kalıcı oluşturma boyutunun çok önemli olmasının nedeni budur.

    (Not: Kalıcı nesil Java 8'de kaldırıldı ve meta veri alanı adı verilen yeni bir yerel bellek alanı eklendi)

    6. Java'da bir nesne ne zaman çöp toplanabilir?

    Bir nesne, o anda onu kullanan uygulama tarafından erişilemez hale geldiğinde, nesne geri dönüştürülebilir.

    7. Java'daki iki istisna türü nedir? Onların arasındaki fark ne?

    Java'da iki tür istisna vardır: kontrol edilmiş (kontrol edilmiş) istisnalar ve kontrol edilmemiş (kontrol edilmemiş) istisnalar. Yöntemlerin veya yapıcıların yürütülmesi bu tür istisnalar atabilse ve kontrol edilmeyen istisnalar yöntem veya yapıcının dışına yayılabilse bile, kontrol edilmeyen istisnaların yöntemlerde veya yapıcılarda bildirilmesine gerek yoktur. Aksine, kontrol edilen istisna, yöntem veya yapıcı üzerinde throws ifadesiyle bildirilmelidir. Ayrıca, sütunumda bahsedilen Java istisna işleme hakkında bazı ipuçları da var.

    8. JVM çöp toplama algoritması

    İşaretleme-Çıkarma algoritması: önce geri dönüştürülmesi gereken tüm nesneleri işaretleyin ve işaretli tüm nesneleri işaretledikten sonra aynı şekilde toplayın.

    Algoritmayı kopyala: Mevcut belleği kapasiteye göre eşit büyüklükte iki parçaya bölün ve bir seferde yalnızca birini kullanın. Bir bellek parçası kullanıldığında, bir başkası kaydedilir ve kullanılan bellek alanı hemen temizlenir.

    Markalama-sıralama algoritması: Markalama süreci "markalama-temizleme" algoritması ile aynıdır, ancak sonraki adımlar geri dönüştürülebilir nesneleri doğrudan temizlemek değil, bir ucu hareket ettirmek ve ardından doğrudan son sınırın dışına belleği temizlemek içindir.

    Nesil toplama algoritması: Genel olarak Java yığını yeni nesil ve eski nesil olarak ikiye ayrılır ve her neslin özelliklerine göre en uygun toplama algoritması benimsenir. Yeni nesil, çok sayıda nesnenin öldüğünü ve çoğaltma algoritmasının seçildiğini keşfetti. Yaşlılıkta, nesnelerin yüksek hayatta kalma oranlarından dolayı, geri dönüşüm için "mark-clean" veya "mark-sort" algoritmasının kullanılması gerekir.

    JVM bilgi çerçevesi diyagramı

    Size Zheng Yudi'nin öğrenme yolunuz için bir rehber olabilecek orijinal JVM öğrenme bilgisi çerçeve şemasından başka bir parça vereceğim

    Ben Zheng Yudi, Oracle Labs Kıdemli Araştırmacısı GraalVM derleyici grubunun çekirdek geliştiricilerinden biri. Bu sütunu, verimli kod yazmayı, hatalarla en iyi şekilde nasıl başa çıkacağınızı ve kendi uygulamalarınız için sanal makinenin çalışma parametrelerini nasıl ayarlayacağınızı anlamanıza yardımcı olması için kullanmak istiyorum.Ayrıca JVM ile röportaj yaptığınızda, yeterince ustalaşabilir ve iyi performans gösterebileceğinizi umuyorum. İdeal bir teklif verin.

    Denemek veya abone olmak için kodu tarayın.

    "EXO" "Paylaş" 190328 Şiddetli mavi damarlar da diziyi çalabilir, Xiao Wu yürüme hormonu
    önceki
    Japonya Oyun / Donanım Haftalık Satışları 201612.12 ~ 12.18
    Sonraki
    Bugün, harika bir şekilde 2019 yabancı drama görünümü konusunu başlatıyoruz ve bu yılki ekran dramasını önceden tahmin ediyoruz.
    Luo Kaiyuan diss Edison Chen: İnsanlar sadece Hiphop Adamı, siz Hiphop Tanrısısınız
    Hua Chenyu, kalan tek genç sanatçı! Mango Terrace, 95 sonrası yeni bir "Zhang Han Zheng Shuang" inşa etmeyi planlıyor
    En güçlü mobil işlemci! Apple A12X biyonik çipi bu kadar özel kılan nedir?
    "EXO" "Paylaş" 190326 "Mutluluk vermek için varım" Bobo, okuduktan sonra enerji dolu olacak alıntılar
    Çin'deki en gizemli rapçi, tüm Çin'de hip-hop ve oyuncularına sahip!
    Bugün editör sizi "Yetenekler" in ikinci sezonundaki dört güzelliğe bir göz atmaya götürecek.
    Yeni iPad Pro'nun tüm yeni özelliklerini tek bir makalede okuyun
    "EXO" "Aktivite" 190328 EXO'nun sevgi dolu olduğu anlamına gelen bir bileklik takın, hadi çiçek yolunu birlikte yürüyelim!
    Yine Demo'nun potu mu? Şüpheli "Resident Evil 7" komplosu sızdırıldı
    Ty. Şarkıyı gönder Diss Zhang Zhenyue, sosisli sandviç, Gai, gerçek kardeş
    Zaman bağışlayıcı değil, yılları nasıl affedebilirim
    To Top