Bu doküman, uygulamanızdaki önemli performans sorunlarını belirlemenize ve düzeltmenize yardımcı olur.
Temel performans sorunları
Bir uygulamanın performansının düşmesine neden olabilecek birçok sorun vardır. Ancak uygulamanızda karşılaşabileceğiniz bazı yaygın sorunlar aşağıda verilmiştir:
- Başlangıç gecikmesi
Başlangıç gecikmesi, uygulama simgesine, bildirime veya başka bir giriş noktasına dokunulması ile kullanıcının verilerinin ekranda gösterilmesi arasında geçen süredir.
Uygulamalarınızda aşağıdaki başlangıç hedeflerini hedefleyin:
500 ms'den kısa sürede baştan başlatma. Sıfırdan başlatma, başlatılan uygulama sistem belleğinde olmadığında gerçekleşir. Bu durum, uygulamanın yeniden başlatılmasından veya uygulama işleminin kullanıcı ya da sistem tarafından durdurulmasından sonra ilk kez başlatıldığı durumlarda ortaya çıkar.
Buna karşılık, hazır durumda başlatma, uygulama arka planda çalışırken gerçekleşir. Baştan başlatma, her şeyi depolama alanından yüklemesi ve uygulamayı başlatması gerektiğinden sistemden en fazla çalışmayı gerektirir. Baştan başlatma işlemlerinin 500 ms veya daha kısa sürmesini sağlamaya çalışın.
P95 ve P99 gecikmeleri, ortanca gecikmeye çok yakın. Uygulamanın başlatılması uzun sürerse kullanıcı deneyimi olumsuz etkilenir. Uygulamanın başlatılmasının kritik yolunda, kilit anlaşmazlığı yaşanabilir ve tutarsızlıklar ortaya çıkabilir. Bunun nedeni, işlemler arası iletişimler (IPC'ler) ve gereksiz G/Ç işlemleridir.
- Kaydırma sarsıntısı
Takılma, sistem istenilen 60 Hz veya daha yüksek ritimde ekrana çizmek için kareleri zamanında oluşturup sağlayamadığında ortaya çıkan görsel kesintiyi tanımlayan terimdir. Kesintiler en çok kaydırma sırasında görülür. Bu sırada, akıcı animasyonlu akış yerine aksama yaşanır. Uygulamanın içeriği oluşturması sistemdeki bir karenin süresinden daha uzun sürdüğü için hareket bir veya daha fazla kare boyunca durakladığında takılma meydana gelir.
Uygulamalar 90 Hz yenileme hızlarını hedeflemelidir. Geleneksel oluşturma hızları 60 Hz'dir ancak birçok yeni cihaz, kaydırma gibi kullanıcı etkileşimleri sırasında 90 Hz modunda çalışır. Bazı cihazlar 120 Hz'ye kadar daha yüksek hızları destekler.
Bir cihazın belirli bir zamanda kullandığı yenileme hızını görmek için Hata ayıklama bölümünde Geliştirici Seçenekleri > Yenileme hızını göster'i kullanarak yer paylaşımını etkinleştirin.
- Sorunlu geçişler
Bu durum, sekmeler arasında geçiş yapma veya yeni bir etkinlik yükleme gibi etkileşimler sırasında belirgindir. Bu tür geçişler, gecikme veya görsel titreşim içermeyen, akıcı animasyonlar olmalıdır.
- Enerji verimsizlikleri
Çalışmak, pil şarjını azaltır. Gereksiz işler yapmak ise pil ömrünü kısaltır.
Kodda yeni nesneler oluşturmaktan kaynaklanan bellek tahsisleri, sistemde önemli miktarda çalışma yapılmasına neden olabilir. Bunun nedeni, yalnızca ayırma işlemlerinin Android Runtime (ART) tarafından yapılmasının değil, daha sonra bu nesnelerin serbest bırakılmasının (çöp toplama) da zaman ve çaba gerektirmesidir. Hem ayırma hem de toplama işlemi, özellikle geçici nesneler için çok daha hızlı ve verimlidir. Eskiden mümkün olduğunda nesne ayırmaktan kaçınmak en iyi uygulama olarak kabul edilse de uygulamanız ve mimariniz için en uygun seçeneği belirlemenizi öneririz. ART'nin yapabileceklerini göz önünde bulundurarak, bakıma uygun olmayan kod riskiyle birlikte ayırmalardan tasarruf etmek en iyi uygulama değildir.
Ancak bu işlem çaba gerektirir. Bu nedenle, iç döngünüzde çok sayıda nesne ayırıyorsanız performans sorunlarına yol açabileceğini unutmayın.
Sorunları belirleme
Performans sorunlarını tespit etmek ve düzeltmek için aşağıdaki iş akışını önerdik:
- Aşağıdaki kritik kullanıcı yolculuklarını belirleyin ve inceleyin:
- Başlatıcı ve bildirim dahil olmak üzere yaygın başlangıç akışları.
- Kullanıcının veriler arasında gezindiği ekranlar.
- Ekranlar arasındaki geçişler.
- Gezinme veya müzik çalma gibi uzun süren akışlar.
- Aşağıdaki hata ayıklama araçlarını kullanarak önceki akışlar sırasında neler olduğunu inceleyin:
- Perfetto: Kesin zamanlama verileriyle cihazın tamamında neler olduğunu görmenizi sağlar.
- Bellek Profiler: Yığın üzerinde hangi bellek ayırmalarının yapıldığını görmenizi sağlar.
- Simpleperf: Belirli bir süre boyunca en fazla CPU kullanan işlev çağrılarının alev grafiğini gösterir. Systrace'te uzun süren bir işlem tespit ettiğinizde ancak nedenini bilmiyorsanız Simpleperf ek bilgi sağlayabilir.
Bu performans sorunlarını anlamak ve hatalarını ayıklamak için her bir test çalıştırmasının hatalarını manuel olarak ayıklamak önemlidir. Toplu verileri analiz ederek önceki adımları değiştiremezsiniz. Ancak kullanıcıların gerçekte ne gördüğünü anlamak ve gerilemelerin ne zaman gerçekleşebileceğini belirlemek için otomatik testte ve sahada metrik toplama işlemini ayarlamak önemlidir:
- Başlangıç akışları
- Alan metrikleri: Play Console'un başlatma süresi
- Laboratuvar testleri: Macrobenchmark ile başlatmayı test etme
- Jank
- Alan metrikleri
- Play Console çerçevesi temel metrikleri: Play Console'da metrikleri belirli bir kullanıcı yolculuğuyla sınırlayamazsınız. Yalnızca uygulama genelindeki genel takılmaları raporlar.
FrameMetricsAggregator
ile özel ölçüm: Belirli bir iş akışı sırasında takılma metriklerini kaydetmek içinFrameMetricsAggregator
'ı kullanabilirsiniz.
- Laboratuvar testleri
- Makro Karşılaştırma ile Kaydırma.
- Makro karşılaştırma, tek bir kullanıcı yolculuğunu kapsayan
dumpsys gfxinfo
komutlarını kullanarak kare zamanlamasını toplar. Bu, belirli bir kullanıcı yolculuğundaki takılmadaki değişimi anlamanın bir yoludur. Karelerin çizilmesinin ne kadar sürdüğünü vurgulayanRenderTime
metrikleri, gerileme veya iyileştirmeleri belirlemek için sarsıntılı karelerin sayısından daha önemlidir.
- Alan metrikleri
Uygulama bağlantısı doğrulama sorunları
Uygulama Bağlantıları, web sitenizin URL'sine dayalı ve web sitenize ait olduğu doğrulanmış derin bağlantılardır. Uygulama Bağlantısı doğrulamalarının başarısız olmasına neden olabilecek nedenler aşağıda verilmiştir.
- Intent filtresi kapsamları: Yalnızca uygulamanızın yanıt verebileceği URL'lerin intent filtrelerine
autoVerify
ekleyin. - Doğrulanmamış protokol geçişleri: Doğrulanmamış sunucu tarafı ve alt alan adı yönlendirmeleri güvenlik riski olarak kabul edilir ve doğrulama işleminde başarısız olur. Bu, tüm
autoVerify
bağlantılarının başarısız olmasına neden olur. Örneğin, HTTPS bağlantılarını doğrulamadan bağlantıları HTTP'den HTTPS'ye yönlendirmek (ör. example.com'dan www.example.com'a) doğrulamanın başarısız olmasına neden olabilir. Intent filtreleri ekleyerek uygulama bağlantılarını doğruladığınızdan emin olun. - Doğrulanamayan bağlantılar: Test amacıyla doğrulanamayan bağlantılar eklemek, sistemin uygulamanız için Uygulama Bağlantıları'nı doğrulamamasına neden olabilir.
- Güvenilir olmayan sunucular: Sunucularınızın istemci uygulamalarınıza bağlanabildiğinden emin olun.
Uygulamanızı performans analizi için ayarlama
Bir uygulamadan doğru, tekrarlanabilir ve uygulanabilir karşılaştırmalar elde etmek için doğru şekilde ayarlama yapmanız önemlidir. Gürültü kaynaklarını bastırırken mümkün olduğunca üretime yakın bir sistemde test yapın. Aşağıdaki bölümlerde, test kurulumu hazırlamak için uygulayabileceğiniz APK'ya ve sisteme özgü bazı adımlar (bazıları kullanım alanına özeldir) gösterilmektedir.
İzleme noktaları
Uygulamalar, kodlarını özel izleme etkinlikleriyle donatabilir.
İzler yakalanırken izleme, bölüm başına yaklaşık 5 μs'lik küçük bir ek yüke neden olur. Bu nedenle, her yöntemin etrafına izleme eklemeyin. 0,1 ms'den uzun iş parçalarını izlemek, darboğazlar hakkında önemli bilgiler verebilir.
APK ile ilgili dikkat edilmesi gereken noktalar
Hata ayıklama varyantları, sorun giderme ve yığın örneklerinin sembolize edilmesi için yararlı olabilir ancak performans üzerinde ciddi etkileri vardır. Android 10 (API düzeyi 29) ve sonraki sürümlerin yüklü olduğu cihazlar, sürüm derlemelerinde profillemeyi etkinleştirmek için manifest dosyalarında profileable android:shell="true"
kullanabilir.
Üretim düzeyinde kod sıkıştırma yapılandırmanızı kullanın. Bu durum, uygulamanızın kullandığı kaynaklara bağlı olarak performansı önemli ölçüde etkileyebilir. Bazı ProGuard yapılandırmaları izleme noktalarını kaldırır. Bu nedenle, test çalıştırdığınız yapılandırma için bu kuralları kaldırabilirsiniz.
Derleme
Uygulamanızı cihaz üzerinde bilinen bir duruma derleyin. Genellikle basitlik için speed
veya üretim performansıyla daha uyumlu olması için speed-profile
(ancak bunun için uygulamayı ısıtmak ve profilleri dökmek ya da uygulamanın temel profillerini derlemek gerekir)
Hem speed
hem de speed-profile
, dex'den yorumlanan çalışan kod miktarını ve dolayısıyla önemli girişimlere neden olabilecek arka planda anında (JIT) derleme miktarını azaltır. Yalnızca speed-profile
, dex'ten çalışma zamanında sınıf yüklemenin etkisini azaltır.
Aşağıdaki komut, uygulamayı speed
modunu kullanarak derleyecektir:
adb shell cmd package compile -m speed -f com.example.packagename
speed
derleme modu, uygulamanın yöntemlerini tamamen derler. speed-profile
modu, uygulamanın yöntemlerini ve sınıflarını, uygulama kullanımı sırasında toplanan kullanılan kod yollarının profiline göre derleyebilir. Profilleri tutarlı ve doğru bir şekilde toplamak zor olabilir. Bu nedenle, bu yöntemi kullanmaya karar verirseniz beklediğiniz verileri topladıklarını onaylayın. Profiller aşağıdaki konumda bulunur:
/data/misc/profiles/ref/[package-name]/primary.prof
Sistemle ilgili dikkat edilmesi gereken noktalar
Düşük düzey ve yüksek doğruluk ölçümleri için cihazlarınızı kalibre edin. Aynı cihaz ve aynı işletim sistemi sürümünde A/B karşılaştırmaları çalıştırın. Aynı cihaz türünde bile performansta önemli farklılıklar olabilir.
Köklenmiş cihazlarda mikro karşılaştırmalar için lockClocks
komut dosyası kullanmayı düşünebilirsiniz. Bu komut dosyaları, diğerlerinin yanı sıra aşağıdakileri yapar:
- CPU'ları sabit bir sıklıkta yerleştirin.
- Küçük çekirdekleri devre dışı bırakın ve GPU'yu yapılandırın.
- Termal kısıtlamayı devre dışı bırakın.
Uygulama lansmanı, DoU testi ve takılma testi gibi kullanıcı deneyimine odaklanan testler için lockClocks
komut dosyası kullanmanızı önermeyiz ancak mikro karşılaştırma testlerinde gürültüyü azaltmak için gerekli olabilir.
Mümkün olduğunda, ölçümlerinizdeki gürültüyü azaltıp ölçüm hatalarını önleyebilecek Macrobenchmark gibi bir test çerçevesi kullanmayı düşünün.
Yavaş uygulama başlatma: Gereksiz trambolin etkinliği
Trambolin etkinliği, uygulamanın başlatılma süresini gereksiz yere uzatabilir. Uygulamanızın bunu yapıp yapmadığını bilmeniz önemlidir. Aşağıdaki örnek izlemede gösterildiği gibi, ilk etkinlik tarafından herhangi bir kare çizilmeden bir activityStart
hemen ardından başka bir activityStart
gelir.
Bu durum hem bildirim giriş noktasında hem de normal bir uygulama başlangıç giriş noktasında gerçekleşebilir ve genellikle yeniden yapılandırarak çözülebilir. Örneğin, başka bir etkinlik çalıştırılmadan önce kurulumu gerçekleştirmek için bu etkinliği kullanıyorsanız bu kodu yeniden kullanılabilir bir bileşene veya kitaplığa dahil edin.
Sık GC'leri tetikleyen gereksiz ayrıştırmalar
Systrace'te, beklenenden daha sık çöp toplama işlemi (GC) gerçekleştiğini görebilirsiniz.
Aşağıdaki örnekte, uzun süren bir işlem sırasında her 10 saniyede bir, uygulamanın zaman içinde gereksiz ancak tutarlı bir şekilde ayırma işlemi gerçekleştirdiğinin bir göstergesidir:
Bellek Profilleyici'yi kullanırken belirli bir çağrı yığınının, ayırmaların büyük çoğunluğunu yaptığını da fark edebilirsiniz. Tüm tahsisleri agresif bir şekilde ortadan kaldırmanız gerekmez. Aksi takdirde kodun bakımı zorlaşır. Bunun yerine, tahsislerin yoğun olduğu noktalar üzerinde çalışmaya başlayın.
Bozuk kareler
Grafik ardışık düzeni nispeten karmaşıktır ve kullanıcının atlanan bir kare görüp göremeyeceğini belirlemede bazı nüanslar olabilir. Bazı durumlarda platform, arabelleğe alma özelliğini kullanarak bir kareyi "kurtarabilir". Ancak, sorunlu kareleri uygulamanızın bakış açısından belirlemek için bu ayrıntıların çoğunu göz ardı edebilirsiniz.
Uygulamadan çok az çalışma gerektiren kareler çizilirken Choreographer.doFrame()
izleme noktaları, 60 FPS'lik bir cihazda 16,7 ms aralıkla gerçekleşir:
Yakınlaştırmayı azaltır ve izlemede gezinirseniz bazı karelerin tamamlanmasının biraz daha uzun sürdüğünü görebilirsiniz.Ancak bu kareler, ayrılan 16, 7 ms'den daha uzun sürmediği için sorun oluşturmaz:
Bu normal ritimde bir kesinti gördüğünüzde, 5. resimde gösterildiği gibi sarsıntılı bir kare olur:
Bunları tespit etme alıştırması yapabilirsiniz.
Bazı durumlarda, hangi görünümlerin şişirildiği veya RecyclerView
'ün ne yaptığı hakkında daha fazla bilgi edinmek için bir izleme noktasını yakınlaştırmanız gerekir. Diğer durumlarda daha ayrıntılı bir inceleme yapmanız gerekebilir.
Takılmalı kareleri tanımlama ve nedenleriyle ilgili hata ayıklama hakkında daha fazla bilgi için Yavaş oluşturma başlıklı makaleyi inceleyin.
Sık karşılaşılan RecyclerView hataları
RecyclerView
öğesinin yedek verilerinin tamamını gereksiz yere geçersiz kılmak, kare oluşturma sürelerinin uzamasına ve takılmalara neden olabilir. Bunun yerine, güncellenmesi gereken görünüm sayısını en aza indirmek için yalnızca değişen verileri geçersiz kılın.
İçeriğin tamamen değiştirilmesi yerine güncellenmesine neden olan pahalı notifyDatasetChanged()
çağrılardan kaçınmanın yolları için Dinamik verileri sunma başlıklı makaleyi inceleyin.
İç içe yerleştirilmiş her RecyclerView
öğesini düzgün şekilde desteklemezseniz dahili RecyclerView
öğesinin her seferinde tamamen yeniden oluşturulmasına neden olabilirsiniz. Görüntülemelerin her iç RecyclerView
arasında geri dönüştürülebilmesini sağlamak için iç içe yerleştirilmiş her iç RecyclerView
öğesinde bir RecycledViewPool
ayarlanmalıdır.
Yeterli veri ön beslemesi yapılmaması veya ön beslemenin zamanında yapılmaması, kullanıcının sunucudan daha fazla veri beklemesi gerektiğinde kaydırmalı listenin en altına ulaşmayı can sıkıcı hale getirebilir. Çerçeve son tarihleri kaçırılmadığından bu durum teknik olarak sarsıntılı olmasa da ön getirmenin zamanlamasını ve miktarını değiştirerek kullanıcının veri beklemek zorunda kalmaması için kullanıcı deneyimini önemli ölçüde iyileştirebilirsiniz.
Uygulamanızda hata ayıklama
Aşağıda, uygulamanızın performansıyla ilgili hata ayıklamayla ilgili farklı yöntemler verilmiştir. Sistem izleme ve Android Studio profilleyicisinin kullanımı hakkında genel bilgi edinmek için aşağıdaki videoyu izleyin.
Systrace ile uygulama başlatma sorunlarını giderme
Uygulama başlatma sürecine genel bakış için Uygulama başlatma süresi başlıklı makaleyi, sistem izlemeye genel bakış için aşağıdaki videoyu inceleyin.
Aşağıdaki aşamalarda başlatma türlerinin anlamını netleştirebilirsiniz:
- Soğuk başlatma: Kayıtlı durum içermeyen yeni bir işlem oluşturarak başlayın.
- Sıcak başlatma: İşlemi yeniden kullanırken etkinliği yeniden oluşturur veya işlemi kayıtlı durumla yeniden oluşturur.
- Sıcak başlatma: Etkinliği yeniden başlatır ve şişirme işleminin başından başlar.
Cihazdaki Sistem İzleme uygulaması ile sistem izleme kayıtları almanızı öneririz. Android 10 ve sonraki sürümler için Perfetto'yu kullanın. Android 9 ve önceki sürümlerde Systrace'i kullanın. Ayrıca, izleme dosyalarını web tabanlı Perfetto izleme görüntüleyicisiyle görüntülemenizi öneririz. Daha fazla bilgi için Sistem izlemeye genel bakış başlıklı makaleyi inceleyin.
Dikkat etmeniz gereken bazı noktalar şunlardır:
- İzleyici çekişmesi: İzleyici tarafından korunan kaynaklar için rekabet, uygulamanın başlatılmasında önemli gecikmeler oluşturabilir.
Senkronize bağlayıcı işlemleri: Uygulamanızın kritik yolunda gereksiz işlemleri arayın. Gerekli bir işlem pahalıysa iyileştirme yapmak için ilgili platform ekibiyle birlikte çalışabilirsiniz.
Eşzamanlı GC: Bu durum yaygındır ve nispeten düşük bir etkiye sahiptir. Ancak bu durumu sık sık yaşıyorsanız Android Studio bellek profilleyicisini kullanarak bu konuyu incelemeyi düşünebilirsiniz.
G/Ç: Başlatma sırasında yapılan G/Ç işlemlerini ve uzun süreli duraklamaları kontrol edin.
Diğer iş parçalarında önemli etkinlik: Bu etkinlikler, kullanıcı arayüzü iş parçasını etkileyebilir. Bu nedenle, başlangıç sırasında arka planda çalışan işlemlere dikkat edin.
Daha iyi uygulama başlatma metriği raporlaması için uygulama açısından başlatma işlemi tamamlandığında reportFullyDrawn
çağrısını yapmanızı öneririz. reportFullyDrawn
simgesini kullanma hakkında daha fazla bilgi için Tam ekrana geçme süresi bölümüne bakın.
Perfetto izleme işleyicisi aracılığıyla RFD tarafından tanımlanan başlangıç zamanlarını ayıklayabilirsiniz. Bu işlem sonucunda kullanıcı tarafından görülebilen bir izleme etkinliği yayınlanır.
Cihaz üzerinde sistem takibi kullanma
Cihaz üzerinde sistem izlemesi yapmak için Sistem İzleme adlı sistem düzeyindeki uygulamayı kullanabilirsiniz. Bu uygulama, cihazı prize takmanıza veya adb
'e bağlamanıza gerek kalmadan cihazdan iz kaydetmenize olanak tanır.
Android Studio Memory Profiler'ı kullanma
Bellek sızıntılarından veya kötü kullanım kalıplarından kaynaklanabilecek bellek baskısını incelemek için Android Studio Bellek Profilleyicisi'ni kullanabilirsiniz. Nesne tahsislerinin canlı görüntüsünü sağlar.
GC'lerin neden ve ne sıklıkta gerçekleştiğini izlemek için bellek profilleyiciyi kullanarak uygulamanızdaki bellek sorunlarını düzeltebilirsiniz.
Uygulama belleğini profillemek için aşağıdaki adımları uygulayın:
Bellek sorunlarını tespit edin.
Odaklanmanızı istediğiniz kullanıcı yolculuğunun bellek profilleme oturumunu kaydedin. Şekil 7'de gösterildiği gibi artan bir nesne sayısı olup olmadığını kontrol edin. Bu durum, sonunda şekil 8'de gösterildiği gibi GC'lere yol açar.
Bellek baskısı oluşturan kullanıcı yolculuğunu belirledikten sonra bellek baskısının temel nedenlerini analiz edin.
Bellek basıncı yoğun bölgelerini teşhis edin.
Şekil 9'da gösterildiği gibi hem Ayrımlar'ı hem de Sığ Boyut'u görselleştirmek için zaman çizelgesinde bir aralık seçin.
Bu verileri sıralamanın birden fazla yolu vardır. Aşağıda, her bir görünümün sorunları analiz etmenize nasıl yardımcı olabileceğine dair bazı örnekler verilmiştir.
Sınıfa göre düzenle: Aksi takdirde önbelleğe alınan veya bir bellek havuzundan yeniden kullanılan nesneler oluşturan sınıfları bulmak istediğinizde kullanışlıdır.
Örneğin, her saniye "Vertex" adlı sınıfta 2.000 nesne oluşturan bir uygulama görürseniz bu uygulama, Ayrımlar sayısını her saniye 2.000 artırır ve sınıfa göre sıralarken bu uygulamayı görürsünüz. Çöp oluşturmamak için bu nesneleri yeniden kullanmak istiyorsanız bir bellek havuzu uygulayın.
Çağrı yığınına göre sırala: Bir döngü içinde veya çok fazla ayırma çalışması yapan belirli bir işlevin içinde olduğu gibi, belleğin ayrıldığı yoğun bir yolun nerede olduğunu bulmak istediğinizde kullanışlıdır.
Sığ Boyut: Yalnızca nesnenin kendisinin belleğini izler. Çoğunlukla yalnızca ilkel değerlerden oluşan basit sınıfları izlemek için kullanışlıdır.
Saklanan Boyut: Nesne ve yalnızca nesne tarafından referans verilen referanslar nedeniyle kullanılan toplam belleği gösterir. Karmaşık nesnelerden kaynaklanan hafıza baskısını izlemek için kullanışlıdır. Bu değeri almak için Şekil 10'da gösterildiği gibi tam bir bellek dökümü alın ve Şekil 11'de gösterildiği gibi Saklanan Boyut sütunu eklenir.
Bir optimizasyonun etkisini ölçme.
Bellek optimizasyonlarının etkisini daha belirgin ve daha kolay ölçmek için GC'ler kullanılır. Bir optimizasyon bellek baskısını azalttığında daha az GC görürsünüz.
Optimizasyonun etkisini ölçmek için, profilleyici zaman çizelgesinde GC'ler arasındaki süreyi ölçün. Bu durumda, GC'ler arasında daha uzun süre geçtiğini görebilirsiniz.
Bellek iyileştirmelerinin nihai etkileri şunlardır:
- Uygulama sürekli olarak bellek baskısına maruz kalmıyorsa bellek yetersizliği nedeniyle kapatılma olasılığı azalır.
- Daha az GC'nin olması, özellikle P99'da sarsıntı metriklerini iyileştirir. Bunun nedeni, GC'lerin CPU çekişmesine neden olmasıdır. Bu da GC gerçekleşirken oluşturma görevlerinin ertelenmesine yol açabilir.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-optimization}
- Donmuş kare
- Makro karşılaştırma yazma