Java'da fonksiyon içinde yarattığımız nesneler bellekte tutuluyor. Fonksiyon sonlandıktan sonra fonksiyon içindeki nesneler ne zaman bellekten silinir?

Örnek olarak aşağıda yazılı fonksiyondaki kritik şifre bilgisini fonksiyon sonlandıktan sonra bellekten okunmaması için ne gibi bir önlem alınmalıdır.

public String askForPin(){
   char[] pin = jPasswordFieldPIN.getPassword();
   if (pn == null || pn.length < 1) return null;
   String spin = new String(pn);
   return spin;
}

Aşağıdaki gibi bir iyileştirme yapıldığında bellek üzerinde tutulan kritik bilgi silinmiş oluyor mu? Hayır ise ne gibi bir yöntem izlenmelidir.

public String askForPin(){
     char[] pn = null;
     String spn = null;
     try {
          pn = jPasswordFieldPIN.getPassword();
          if (pn == null || pn.length < 1) return null;
          spn = new String(pn);
          return spn;
        } catch (Exception e) {
            return null;
        } finally {
           pn = null;
           spn = null;
      }
}

soruldu: 06 Ara '13, 11:16

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%


Merhaba java ile objelerin bellekten silinmesi çok fazla sizin elinizde olmayan birşeydir. Bu detaylı bir konu. Ben size kısaca şunu söyleyeyim. Bellekten geri okunmamasını istiyorsanız char[] (karakter dizisi) kullanın, daha sonra dizi içerisindeki elemanların hepsinin üzerine yazarsınız. Böylece şifre hazfızadan silinmiş olur.

Örnek şifremiz ahmet123 olsun

// aşağıdaki yerine bir yerden karakter karakter okuyabilirsin
char[] sifre = {'a', 'h', 'm', 'e', 't', '1', '2', '3'};
// kullanım şekli senaryona kalmış önemli olan stringe dönüştürmemek
....
// temizlik
for(int i=0; i<sifre.length;i++){
    sifre[i] = 'x';
}
permanent link

cevaplandı: 07 Ara '13, 01:38

myururdurmaz's gravatar image

myururdurmaz
2.2k11027
cevap kabul oranı: 23%

değiştirildi: 07 Ara '13, 03:13

String objesi ile char array arasındaki fark nedir? Yani memory'de tutulma ve erişim şekilleri arasında bir far mı var?

(07 Ara '13, 02:59) MDemir MDemir's gravatar image
1

String char[] den farklı olarak mutable dır. Yani bir kere oluştuğunda, tekrar değiştiremezsiniz. Bu bakımdan bir string bir kere oluşursa, bir daha GC onu silene kadar siz onu değiştiremezsiniz.

(09 Ara '13, 09:57) mceliksoy ♦ mceliksoy's gravatar image

Teşekkürler. Bu tür kritik bilgileri byte[] veya char[] üzerinde saklamak daha doğru bir yaklaşım diyebiliriz o zaman.

(09 Ara '13, 12:05) MDemir MDemir's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077
×4
×3

Soruldu: 06 Ara '13, 11:16

Görüntüleme: 521 kez

Son güncelleme: 09 Ara '13, 12:05

powered by BitNami OSQA