Где я могу найти программу MemoryConsumer.java для проверки потребления памяти? - PullRequest
3 голосов
/ 04 февраля 2011

Где найти программу MemoryConsumer.java для проверки потребления памяти?Я знаю, что такая вещь уже существует, так как я вижу ссылки через Google на такие вещи.Например, этот сайт Oracle ссылается на «ConsumeHeap.java», но я не знаю, где найти этот исходный код.

параметры горячей точки 1.6

Кто-нибудь знаетгде найти или как создать такую ​​вещь?

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

Я использовал этот класс ObjectSizer для хорошего эффекта:

http://www.javapractices.com/topic/TopicAction.do?Id=83

Он работает, создавая огромное количество экземпляров объектов, как предложил Тайлер.

2 голосов
/ 04 февраля 2011

Вы можете просто создать огромное количество экземпляров объектов и оставить их в области видимости.

ArrayList<SomeObject> listOfObjects = new ArrayList<SomeObject>;
for (int i = 0; i < aBigNumber; i++) {
  listOfObjects.add(new SomeObject());
}
1 голос
/ 04 февраля 2011

Это действительно довольно тривиально:

public class ConsumeHeap {
    public static void main(String[] args) {
        int[] a = new int[2000000000];
    }
}

Это должно привести к немедленной ошибке OutOfMemoryError на всех 32-битных виртуальных машинах. Следующее должно вызвать исключение для всех современных виртуальных машин, так как для этого потребуется 16 * 10 ^ 18 байт памяти:

public class ConsumeHeap {
    public static void main(String[] args) {
        int[][] a = new int[2000000000][2000000000];
    }
}
0 голосов
/ 24 января 2013

В общем случае операция считается расширенной, если эта операция занимает много времени или требует много памяти.Общая используемая / свободная память программы может быть получена в программе через java.lang.Runtime.getRuntime ();

У среды выполнения есть несколько методов, которые относятся к памяти.Следующий пример кодирования демонстрирует его использование.

package test;

import java.util.ArrayList;
import java.util.List;

public class PerformanceTest {
  private static final long MEGABYTE = 1024L * 1024L;

  public static long bytesToMegabytes(long bytes) {
    return bytes / MEGABYTE;
  }

  public static void main(String[] args) {
    // I assume you will know how to create a object Person yourself...
    List<Person> list = new ArrayList<Person>();
    for (int i = 0; i <= 100000; i++) {
      list.add(new Person("Jim", "Knopf"));
    }
    // Get the Java runtime
    Runtime runtime = Runtime.getRuntime();
    // Run the garbage collector
    runtime.gc();
    // Calculate the used memory
    long memory = runtime.totalMemory() - runtime.freeMemory();
    System.out.println("Used memory is bytes: " + memory);
    System.out.println("Used memory is megabytes: "
        + bytesToMegabytes(memory));
  }
} 
...