Как отследить любое создание объекта на моей JVM с помощью Runtime.freeMemory () и GC - PullRequest
1 голос
/ 21 марта 2012

Я использую GC по умолчанию с 1.6.0_27-b07 (Sun's JRE) и из-за this Я не могу обнаружить увеличение памяти с помощью Runtime.getRuntime (). FreeMemory ().Может кто-нибудь пролить свет на то, как этого добиться?Должен ли я использовать другой GC?Какой из них?

Простая программа ниже печатает 0 для выделенной памяти.:( :(: (

import java.util.HashSet;
import java.util.Set;

public class MemoryUtils {

    private static Set<String> set = new HashSet<String>();

    public static void main(String[] args) {

        long mem = Runtime.getRuntime().freeMemory();

        // now create a bunch of objects and save them in the set
        for (int i = 0; i < 100; i++) {
            set.add("foo" + i);
        }

        long allocated = mem - Runtime.getRuntime().freeMemory();

        System.out.println("Memory allocated: " + allocated); // ===> GIVES 0 !!!!

    }
}

1 Ответ

3 голосов
/ 21 марта 2012

Эти объекты будут выделяться в пространстве, зарезервированном для недолговечных объектов, и перемещаться в основную кучу, только если они выживают некоторое время.

Вам действительно нужно использовать профилировщик, если вы хотите точно видеть, что происходитсо всеми объектами, которые создает ваше приложение.

Вот еще немного информации: Объяснение памяти Java (SUN JVM)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...