C malloc
uygulamaları genellikle istenen bellek miktarını tahsis etmez, bunun yerine sabit boyutlu bellek miktarlarını kullanır, örn. İki boyuttan güçle, 1025 baytlık bir ayırma aslında 2052 baytlık bir segmenti 1023 baytlık bir eğim olarak alır.Java dizileri HotSpot'ta (yani ne kadar slop) bellek kullanıyor?
HotSpot, Java dizileri için benzer bir ayırma mekanizması kullanıyor mu? Öyleyse, bir Java dizisini hiçbir slop olmadığı şekilde ayırmanın doğru yolu nedir? (Örn. Dizi uzunluğu iki veya belki iki eksi gücün sabit bir miktarının gücü olmalıdır?)
Diyelim ki 1025 bayt depolamak için bir dizi ihtiyaç varsayalım (Cevapları nesne boyutu kontrol etmek için güvenli olmayan sınıfını kullanarak bir örnek ekleyin). Java'nın bu dizi için 2048 bayt bellek ayırdığını ve 1023 bayt kullanılmadan bırakıldığını varsayalım. 1025 bayt depolamak için 2048 baytlık bir dizi oluşturmada ne kazanırsınız? Şimdi, kullanılmayan 1023 byte'ları kendiniz işlemek ve dizinin gerçek uzunluğunu bir yerde saklamak ve JVM'nin sizin için yapmasına izin vermek yerine diziyi geçmek yerine argüman olarak iletmeniz gerekir. Ve tüketilen hafıza miktarı aynı olacaktır. Bu no-brainer. Bir diziyi ayırmanın doğru yolu, ihtiyacınız olan uzunlukta bir dizi ayırmaktır. –
Dürüst olmak gerekirse, bir JVM uygulamasının belleği nasıl işlediğinden endişe etmem. Java gibi yönetilen bir dil kullanmanın sevinçleri, hafızanın sadece dev bir dizi olmaması, hiçbir zaman arabellek taşması ya da sınır dışı problemlerden ya da yol göstericilerinden kaynaklanan bellek bozulmasından endişelenmenize gerek yoktur. nesneyi temizlemek için endişelenmek. Kendinizi Java'nın zenine açın. – scottb
'malloc', çöp toplayan bir dilin endişelenmesi gereken bir dizi kısıtlamaya sahiptir. Java'nın bu şeyler hakkında endişelenmesi gerektiğini düşünmezdim. –