1 21 22 package org.armedbear.lisp; 23 24 public final class room extends Primitive 26 { 27 private room() 28 { 29 super("room", "&optional x"); 30 } 31 32 public LispObject execute(LispObject[] args) throws ConditionThrowable 33 { 34 Runtime runtime = Runtime.getRuntime(); 35 long total = 0; 36 long free = 0; 37 long maxFree = 0; 38 while (true) { 39 try { 40 runtime.gc(); 41 Thread.currentThread().sleep(100); 42 runtime.runFinalization(); 43 Thread.currentThread().sleep(100); 44 runtime.gc(); 45 Thread.currentThread().sleep(100); 46 } 47 catch (InterruptedException e) {} 48 total = runtime.totalMemory(); 49 free = runtime.freeMemory(); 50 if (free > maxFree) 51 maxFree = free; 52 else 53 break; 54 } 55 long used = total - free; 56 Stream out = getStandardOutput(); 57 StringBuffer sb = new StringBuffer ("Total memory "); 58 sb.append(total); 59 sb.append(" bytes"); 60 sb.append(System.getProperty("line.separator")); 61 sb.append(used); 62 sb.append(" bytes used"); 63 sb.append(System.getProperty("line.separator")); 64 sb.append(free); 65 sb.append(" bytes free"); 66 sb.append(System.getProperty("line.separator")); 67 out._writeString(sb.toString()); 68 out._finishOutput(); 69 return number(used); 70 } 71 72 private static final room ROOM = new room(); 73 } 74 | Popular Tags |