CodeBlanks Logo Icon CodeBlanks

Metaspace

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

Main.java
// Topic sınıfını tanımla
// getClass ile sınıf nesnesini al
// main içinde adı yazdır

Örnek çözüm

Main.java
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

Soru
String name = c.____();
Cevap
String name = c.getSimpleName();

Açıklama: getSimpleName kısa sınıf adını verir.

Uzman bölümündeki tüm dersler