Laboratuvar / Açık yöntem

Java 8 → 25: aynı sipariş raporu, iki runtime

Aynı bytecode ile bellekte 1 milyon sipariş raporu: 1,891 ms → 1,886 ms. Yedi veri boyutu ve 440 gerçek JVM koşusuyla sentetik runtime deneyi.

TamamlandıKOBİKurumsal BTPartner

Corretto 8u432şu sistemeCorretto 25.0.3

Aynı görev, iki sistem

Önce: Corretto 8u432
Önce
Sonra: Corretto 25.0.3
Sonra

Sonuçlar

  • Önce
  • Sonra

Bellekte 1 milyon sipariş raporu

↓ %0,3

Düşük daha iyi · 10 ölçümün medyanı

Bellekte 1 milyon sipariş raporu

ms1,89 ms1,89 ms
ms1,89 ms1,89 ms
Tablo olarak göster
Bellekte 1 milyon sipariş raporu
KalemÖnceSonra
ms1,89 ms1,89 ms
Ölçüm yöntemi →

Kendiniz deneyin

Kayıtlı laboratuvar sonuçlarını birlikte oynatın.

Ölçek arttığında

Sipariş sayısına göre rapor süresi

  • Önce
  • Sonra

Sipariş sayısına göre rapor süresi (µs)

05001.0001.5002.0001.000500.0001.000.0001.891,16 µs1.885,57 µs

Veri noktasını seçin

05001.0001.5002.0001.0001.000.000

Veri noktasını seçin

Sentetik sipariş kaydıİşaretçiler: ölçülen noktalar
Tablo olarak göster
Sipariş sayısına göre rapor süresi
Sentetik sipariş kaydıÖnceSonra
1.0002,04 µs2,03 µs
5.0009,63 µs9,58 µs
10.00019,11 µs19,12 µs
50.00094,8 µs94,55 µs
100.000189,19 µs188,55 µs
500.000952,24 µs945,33 µs
1.000.0001.891,16 µs1.885,57 µs

Nasıl ölçtük?

Ortam, protokol ve teknik değerlendirme

Ortam ve veri

Ortam
Apple M3 · 8 çekirdek · 24 GiB RAM · macOS Darwin 25.5.0 · native arm64. Paylaşılan geliştirme makinesi; tarayıcı ve site geliştirme sunucusu açık.
Veri seti
1.000–1.000.000 deterministik sipariş; müşteri verisi yok. Tam sayı kuruşlar, iptal filtresi ve 84 bölge/ay kovası; aynı çıktı checksum ile doğrulandı.
Araçlar
Amazon Corretto 1.8.0_432-b06 · Amazon Corretto 25.0.3+9-LTS · Java 8 javac → same bytecode · Python standard library oracle · -Xms256m -Xmx256m -XX:+UseG1GC
Tekrarlar
44 kol × 10 taze JVM = 440 koşu. Her JVM: 5 sn ısınma, en az 1 sn ölçüm; sabit rastgele sıra; bütün tekrarlar dahil.
Ham ölçüm verisini açın ↗

Aynı bytecode ile sipariş raporu süresi

1.000–1.000.000 kayıt, her noktada iki runtime ve on taze JVM. Aynı çıktı bağımsız Python hesabıyla doğrulanır; rapor başına sürelerin medyanı alınır.

Java 8 javac ile bir kez derlenen aynı bytecode; Corretto 1.8.0_432-b06 ve 25.0.3+9-LTS, native arm64 Apple M3, 24 GiB RAM. Her JVM -Xms256m -Xmx256m -XX:+UseG1GC, 5 sn ısınma ve en az 1 sn ölçüm kullanır. Veri üretimi pencere dışında; tarama, gruplama, checksum ve harness döngüsü içinde. elapsedNanos/batches her koşunun rapor süresidir; on koşunun medyanı gösterilir. Yedi boyut ve tüm tekrarlar saklanır. Paylaşılan masaüstü, kısa ölçüm penceresi ve farklı patch seviyeleri sınırlardır; JMH veya üretim kapasitesi testi değildir.

Ölçüm betiğini inceleyin ↗

Bu rapor hangi işi yapıyor?

Bir sipariş listesinden iptal edilen kayıtları çıkarıp tutarları bölge ve aya göre topluyoruz. Veri bir kez üretiliyor; zamanlanan bölüm tarama, toplama ve sonuç kontrolü. Veritabanı, ağ veya ekran çizimi rapor süresine dahil değil.

Kod Java 8 ile bir kez derlendi. Aynı bytecode, aynı veri ve aynı heap/GC bayraklarıyla iki kurulu runtime’da çalıştı. Bu çalışma için yeni yazılan sentetik uygulama kullanıldı; geçmiş bir müşteri uygulamasının dönüşümü olarak sunulmuyor. Yukarıdaki görseller, gerçek ölçümlerden üretilen rapor görüntüleyicisinin ekranlarıdır.

Bir milyon kayıtta ne değişti?

Önceden seçilen birincil noktada medyan süre 1,891 ms’den 1,886 ms’ye geldi: bu koşullarda %0,3 daha kısa. Her değer on ayrı JVM’nin rapor başına ortalama sürelerinin medyanıdır. Tekrar aralığı Java 8 için 1,875–1,91 ms, Java 25 için 1,848–1,92 ms oldu. Yedi veri noktasının tamamı grafikte ve ham dosyada bulunur; yavaş tekrarlar çıkarılmadı.

Bu küçük medyan farkı, örtüşen tekrar aralıklarıyla birlikte okunmalı. Bu işte yalnız runtime değiştirmek belirgin bir hız kazancı göstermedi; %0,3 farkı tek başına geçişin gerekçesi yapmıyoruz. İstatistiksel anlamlılık iddiası veya güven aralığı hesaplaması yoktur.

Runtime değişimini ürününüzde değerlendirmek için ilk iş, sizin günlük raporunuzu veya bekleyen işleminizi aynı çıktı kontrolüyle karşılaştırmaktır. Böylece teknoloji sürümünden önce işin kendisi için karar verirsiniz.

Bekleyen iş ile hesap yapan iş aynı değil

Rapor deneyine iki kontrol ekledik: gerçek loopback TCP bağlantısıyla cevap bekleyen işler ve 20.000 adımlı sayısal hesap yapan işler. Her grupta 16, 64 ve 256 iş bir arada sunuldu. Bunlar eşzamanlı insan kullanıcı sayıları değildir.

Java 25’te platform ve virtual thread kolları hem 16 hem 128 izinle ölçüldü. İzin sayısını artırmanın etkisiyle thread türünün etkisini ayrı okuyabilirsiniz. Bağımlılık servisinin 32 çalışanı ve her istekte tanımlı 20 ms beklemesi vardır; daha fazla istemci işi bağımlılığın kapasitesini ortadan kaldırmaz.

Aşağıdaki değerler on JVM koşusunun medyan batch süresidir; iş başına gecikme değildir. Her işin kuyruğu içeren p95’i ayrıca ham veride ve dağılım dosyasında tutulur.

TCP bekleme kontrolü

Runtime / executor / izin 16 iş · ms 64 iş · ms 256 iş · ms
Java 8 / platform / 16 31,602 119,495 454,72
Java 25 / platform / 16 31,098 114,674 438,213
Java 25 / virtual / 16 30,892 115,55 430,669
Java 25 / platform / 128 31,256 60,785 220,083
Java 25 / virtual / 128 31,106 60,939 221,106

CPU kontrolü

Runtime / executor / izin 16 iş · ms 64 iş · ms 256 iş · ms
Java 8 / platform / 16 0,251 0,69 2,5
Java 25 / platform / 16 0,254 0,731 2,619
Java 25 / virtual / 16 0,232 0,652 2,497
Java 25 / platform / 128 0,258 0,696 2,587
Java 25 / virtual / 128 0,235 0,684 2,477

Bu ortamın sınırları

Ölçüm tek bir paylaşılan Apple M3 makinede yapıldı. Tarayıcı ve geliştirme sunucusu açık kaldı; başka ajanlardan ağır test/build çalıştırmamaları istendi. Bir dakikalık sistem yükü 2,56–21,14 aralığındaydı; her koşunun öncesi/sonrası ham kayıtta bulunur. CPU kotası veya ayrı yük üretici kullanılmadı; doğal işletim sistemi ve tarayıcı etkinliği ayrı izole edilmedi. Sabit 5 saniyelik ısınma, JIT’in tamamen kararlı duruma ulaştığını kanıtlamaz.

Corretto 8u432-b06 ile 25.0.3+9-LTS karşılaştırıldı. Java 8 tarafı güncel yama diye tanımlanmaz; ana sürüm ve yama farklılıkları bu deneyde ayrı ayrı izole edilmedi. Sonuçlar bu build’lere ve işlere aittir. Fiyat, lisans, RSS/tepe bellek, GC duraklamaları veya güvenlik açığı ölçülmedi; bunlardan tasarruf ya da güvenlik oranı türetilmedi.

İlk tam deneme üçüncü süreçte geçici TCP portları tükenince durdu. Tüm kayıtları korundu. Bağımlılığın sentetik beklemesi 2 ms’den 20 ms’ye alındı ve her JVM için yeni bağımlılık portu açıldı; ardından 440 koşunun tamamı baştan çalıştırıldı. İlk denemenin iki tamamlanan sonucu bu tabloya eklenmedi.

Tam koşunun duvar saati süresi 48,7 dakikadır; bu, insan çalışma saati değildir. İnsan saatleri kayıtlı olmadığı için süreç bölümünde sayısal emek iddiası yoktur.

Kaynaklar ve tekrar çalıştırma

440 ham ölçüm — CSV, tüm dağılımlar, ortam ve koşu manifesti, yayın inceleme kaydı ve kaynak + tüm loglar — ZIP açıktır. Ham dosyalardaki publishable: false, koşucunun otomatik yayın onayı vermediğini belirtir; bu bayraklar değiştirilmeden ayrı bir yayın inceleme kaydı hazırlanmıştır.

Açık kaynak deposundaki komutlarla aynı matrisi yeniden çalıştırabilirsiniz. Oracle’ın virtual thread açıklaması bekleyen I/O ve CPU işlerinin ayrımını açıklar. Amazon Corretto 8 ve Corretto 25 dağıtım belgeleri destek modelini açıklar; bu sayfalar kurulu eski build’in güncel olduğunu göstermez. Harness JMH kullanmaz.

Ne yaptık?

  1. Deney kapsamı

    YZAynı iş çıktısını üreten sentetik rapor, I/O ve CPU kontrolü tasarlandı.

    İnsanSite sahibi yaygın Java sistemlerini karşılaştırma ve gerçek ölçüm yayımlama yönünü belirledi.

  2. Çalıştırma ve doğrulama

    YZDüzenek yazıldı; gerçek JVM süreçleri çalıştırıldı, bağımsız checksum ve dosya bütünlüğü denetlendi. Başarısız ilk deneme ayrı korundu.

    İnsanYerel makinede tam ölçüm yapılması onaylandı. Bu adım için ayrı insan çalışma saati veya kod inceleme kaydı tutulmadı.

  3. Açık kanıt paketi

    YZTüm ölçümler, kaynaklar, kontrol kolları ve iki dilde sonuç metni hazırlandı; ham değerler değiştirilmedi.

    İnsanSite sahibi yayına açılmasını istedi. Otomasyon süresi insan emeği saati olarak yazılmadı.

Süre kaydı tutulmadı.