Java ile bellek sızıntısı oluşturma
Az önce bir mülakata girdim ve benden Java ile bir bellek sızıntısı oluşturmam istendi.
Söylemeye gerek yok, bir tane oluşturmaya nasıl başlayacağıma dair hiçbir fikrim olmadığı için kendimi oldukça aptal hissettim.
Örnek ne olabilir?
3065
3
Yapılması gereken basit bir şey, yanlış (veya var olmayan)
hashCode()
veyaequals()
içeren bir HashSet kullanmak ve ardından "duplicates" eklemeye devam etmektir. Yinelenenleri olması gerektiği gibi yok saymak yerine, küme yalnızca büyüyecek ve onları kaldıramayacaksınız.Bu kötü anahtarların/elemanların etrafta takılmasını istiyorsanız, aşağıdaki gibi statik bir alan kullanabilirsiniz
Belki JNI aracılığıyla harici yerel kod kullanarak?
Saf Java ile bu neredeyse imkansızdır.
Ancak bu, belleğe artık erişemediğinizde, ancak hala uygulamaya ait olduğunda, "standart" bir bellek sızıntısı türü ile ilgilidir. Bunun yerine kullanılmayan nesnelere referanslar tutabilir veya daha sonra kapatmadan akışları açabilirsiniz.
Statik bir Harita oluşturun ve ona sabit referanslar eklemeye devam edin. Bunlar asla GC'lenmeyecektir.