Meslektaşınızın ne hakkında konuştukları hakkında hiçbir fikri yok.
En pahalı operasyonunuz onları dinliyor olacaktı . Sizi, on yıldan daha eski olan bilgilere (bu cevabın asıl tarihi itibariyle) yanı sıra burada göndermek ve İnternet'i gerçeği araştırmak için zaman harcamak zorunda bırakarak sizi yanlış yönlendirerek zamanınızı boşa harcadılar .
Umarım onlar sadece on yıl önce duydukları veya okudukları bir şeyi cahilce yetersiz tutarlar ve daha iyisini bilmiyorlar. Ben de şüpheli olarak söylediklerini başka bir şey alırdım, bu her iki şekilde de güncel olan herkes tarafından iyi bilinen bir yanlışlık olmalı.
Herşey bir Nesnedir (hariç primitives
)
İlkellerden ( int, long, double
, vb.) Başka her şey Java'daki Nesnelerdir. Java'da Nesne oluşturulmasını önlemenin bir yolu yoktur.
Java'da bellek ayırma stratejileri nedeniyle nesne oluşturma çoğu durumda C ++ 'dan daha hızlıdır ve JVM'deki diğer her şeye kıyasla tüm pratik amaçlar için "özgür" kabul edilebilir .
1990'ların sonlarında olduğu gibi, 2000'lerin başlarında JVM uygulamaları, Object'lerin fiili tahsisinde genel bir performans gösterdi. En azından 2005'ten beri durum böyle değildi.
Eğer melodi Eğer -Xms
doğru çalıştırmak için uygulama için gereken tüm hafızayı desteklemek için, GC çalıştırmak ve kısa ömürlü programlar may asla GC hiç modern GC uygulamalarda çöp en süpürmek zorunda asla.
Yine de kırmızı bir ringa balığı olan boş alanı denemeyi ve en üst düzeye çıkarmaz, çalışma zamanının performansını en üst düzeye çıkarır. Bu JVM Yığınının neredeyse her zaman% 100 tahsis edildiği anlamına gelirse, öyle olsun. Ücretsiz JVM yığın hafızası size zaten orada oturan hiçbir şey vermiyor.
GC'nin sistemin geri kalan kısmına yararlı bir şekilde belleği boşaltacağı yanılgısı vardır, bu tamamen yanlıştır!
JVM yığını büyüyüp daralmaz, böylece sistemin geri kalanı JVM Yığındaki boş hafızadan olumlu bir şekilde etkilenir . -Xms
Başlangıçta belirtilenlerin ALL'sini tahsis eder ve sezgisel olanı, JVM'nin bu örneği tamamen sona erene kadar herhangi bir işletim sistemi işlemiyle paylaşılmak üzere bu belleğin hiçbir zaman işletim sistemine geri bırakılmamasıdır. -Xms=1GB -Xmx=1GB
herhangi bir zamanda gerçekte ne kadar nesne oluşturulduğuna bakılmaksızın 1GB RAM tahsis eder. Yığın belleğinin yüzdelerinin serbest bırakılmasını sağlayan bazı ayarlar vardır, ancak tüm pratik amaçlar için JVM , bunun gerçekleşmesi için hiçbir zaman bu hafızanın yeteri kadarını serbest bırakamaz.bu yüzden başka hiçbir işlem bu belleği geri alamaz, bu nedenle sistemin geri kalanı JVM Yığınından da özgür olmamaktan faydalanamaz. Bunun için bir RFE 29-NOV-2006’da “kabul edildi” , ancak bu konuda hiçbir şey yapılmadı. Bu davranış otorite kimsenin endişesi olarak kabul edilmez.
Çok sayıda kısa, kısa ömürlü nesnenin yaratılmasının JVM'nin uzun süre duraklatmasına neden olduğu yanılgısı vardır, bu şimdi de yanlıştır.
Mevcut GC algoritmaları kısa ömürlü birçok küçük nesne oluşturmak için optimize edilmiştir , yani her programdaki Java nesneleri için temelde% 99 sezgiseldir. Yapılan girişimler Nesne havuzu oluşturma aslında JVM çoğu durumda kötü performans yapacaktır.
Bugün havuza ihtiyaç duyan tek Nesneler, JVM'ye harici sonlu kaynakları ifade eden Nesneler ; Soketler, Dosyalar, Veritabanı Bağlantıları vb. Yeniden kullanılabilir. Normal nesneler, bellek konumlarına doğrudan erişmenize izin veren dillerle aynı şekilde birleştirilemez . Nesne önbelleğe alma farklı bir kavramdır ve bazı insanların doğal olarak havuzlama dedikleri şey olabilir veya olmayabilir , iki kavram aynı değildir ve karıştırılmamalıdır.
Modern GC algoritmaları bu soruna sahip değil çünkü belirli bir nesilde boş hafıza gerektiğinde bir programa tahsis edilmiyorlar, tahsil ediyorlar. Yığın yeterince büyükse, duraklamalara neden olacak kadar uzun zamandır hiçbir ayrılma gerçekleşmez.
Nesneye Yönelik Dinamik diller, artık hesaplamaya duyarlı testlerde bile günümüzde C atıyor.