Metaspace
- Java kursu
- Uzman
- Ders 11/46
- 5 dk
Metaspace ile sınıf meta verisi bölgesini öğrenirsin.
Metaspace bölgesi
Metaspace, sınıflara ait metadata'yı (yöntem tabloları, alan bilgileri, sabit havuz) tutar. Java 8 öncesinde bu işi PermGen yapardı; sabit boyutu yüzünden OutOfMemoryError sık görülürdü. Metaspace ise yerel belleği kullanır ve gerektikçe büyür.
Bir sınıf yüklendiğinde metadata'sı Metaspace'e yazılır. Çok sayıda sınıf dinamik olarak üretilirse Metaspace büyür; bu yüzden sınırı -XX:MaxMetaspaceSize ile ayarlamak istenebilir. Nesnelerin kendisi yine öbekte durar; Metaspace yalnızca sınıf düzeyinde bilgi tutar.
Sınıf nesnesi ve Metaspace
Her yüklü sınıfın bir Class nesnesi vardır ve bu nesne Metaspace'deki metadata'ya başvurur. obj.getClass() veya Topic.class ile bu nesneye erişilir.
Örnek: Class<?> c = new Topic().getClass(). Burada c.getSimpleName() sınıfın kısa adını verir; bu bilgi Metaspace'den gelir. Çalışma anında tür incelemesi (reflection) bu nesne üzerinden yapılır. Metaspace, sınıf sayısı arttıkça büyür.
Uygulama Sınıf metadata'sını oku
Bir Topic sınıfı tanımla. main içinde new Topic().getClass() ile Class<?> nesnesini al ve getSimpleName() sonucunu System.out.println ile yazdır.
Başlangıç kodu
// Topic sınıfını tanımla
// getClass ile sınıf nesnesini al
// main içinde adı yazdırÖrnek çözüm
class Topic { }
public class MetaspaceDemo {
public static void main(String[] args) {
Class<?> c = new Topic().getClass();
System.out.println(c.getSimpleName());
}
}Beklenen çıktı
Topic
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Metaspace kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
Metaspace |
Sınıf metadata'sı |
PermGen |
Eski bölge |
getClass() |
Metaspace'e başvurur |
Yığın |
Yerel değişkenler |
2 Metaspace neyi saklar?
- Nesneleri
- Yerel değişkenleri
- Çalışan iş parçacıklarını
- Sınıf metadata'sını Doğru cevap
Açıklama: Metaspace sınıf metadata'sını saklar.
3 Sınıf adını al
String name = c.____();
String name = c.getSimpleName();
Açıklama: getSimpleName kısa sınıf adını verir.