?? memorydemo.java
字號(hào):
package 內(nèi)存管理;
/**
盡管Java提供了自動(dòng)垃圾回收,有時(shí)也想知道對(duì)象堆的大小以及它還剩下多少。可以
利用這些信息檢驗(yàn)?zāi)愕拇a的效率,或估計(jì)對(duì)某些類型,有多少對(duì)象可以被實(shí)例化。為了
獲得這些值,可以使用totalMemory( )和freeMemory( )方法。
正如我們?cè)诘?部分提及的,Java的垃圾回收器周期性地運(yùn)行將不再使用的對(duì)象放入回
收站。然而有時(shí)想在收集器的下一個(gè)指定循環(huán)之前收集被丟棄的對(duì)象。可以通過調(diào)用gc( )
方法按照要求運(yùn)行垃圾回收器。一個(gè)好的嘗試是調(diào)用gc( )方法,然后再調(diào)用freeMemory( )
方法以獲得內(nèi)存使用的底線。接著執(zhí)行你的程序,并再一次調(diào)用freeMemory( )方法看分配
了多少內(nèi)存。下面的例子說明了這個(gè)思想。#
#Total memory is: 2031616
Initial free memory: 1730584
Free memory after garbage collection: 1867616
Free memory after allocation: 1851032
Memory used by allocation: 16584
Free memory after collecting discarded Integers: 1867616
*/
// Demonstrate totalMemory(), freeMemory() and gc().
class MemoryDemo {
public static void main(String args[]) {
Runtime r = Runtime.getRuntime();
long mem1, mem2;
Integer someints[] = new Integer[1000];
System.out.println("Total memory is: " +
r.totalMemory());
mem1 = r.freeMemory();
System.out.println("Initial free memory: " + mem1);
r.gc();
mem1 = r.freeMemory();
System.out.println("Free memory after garbage collection: "
+ mem1);
for (int i = 0; i < 1000; i++) {
someints[i] = new Integer(i); // allocate integers
}
mem2 = r.freeMemory();
System.out.println("Free memory after allocation: "
+ mem2);
System.out.println("Memory used by allocation: "
+ (mem1 - mem2));
// discard Integers
for (int i = 0; i < 1000; i++) {
someints[i] = null;
}
r.gc(); // request garbage collection
mem2 = r.freeMemory();
System.out.println("Free memory after collecting" +
" discarded Integers: " + mem2);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -