001package daikon; 002 003import static java.nio.charset.StandardCharsets.UTF_8; 004import static java.nio.file.StandardOpenOption.APPEND; 005import static java.nio.file.StandardOpenOption.CREATE; 006 007import java.io.PrintWriter; 008import java.nio.file.Files; 009import java.nio.file.Paths; 010import org.checkerframework.checker.initialization.qual.UnknownInitialization; 011 012public class MemMonitor implements Runnable { 013 014 boolean keep_going; 015 long max_mem_usage; 016 String filename; 017 018 public MemMonitor(String filename) { 019 this.filename = filename; 020 try (PrintWriter fout = new PrintWriter(Files.newBufferedWriter(Paths.get(filename), UTF_8))) { 021 022 keep_going = true; 023 max_mem_usage = 0; 024 025 long initial_mem_load = mem_usage(); 026 fout.println("Initial memory load, " + initial_mem_load); 027 fout.println( 028 "Format: pptName, peak_mem_usage, num_samples, num_static_vars, num_orig_vars," 029 + " num_scalar_vars, num_array_vars, num_derived_scalar_vars," 030 + " num_derived_array_vars"); 031 } catch (java.io.IOException e) { 032 throw new Error("could not open " + filename, e); 033 } 034 } 035 036 private long mem_usage(@UnknownInitialization(MemMonitor.class) MemMonitor this) { 037 return (java.lang.Runtime.getRuntime().totalMemory() 038 - java.lang.Runtime.getRuntime().freeMemory()); 039 } 040 041 @Override 042 public void run() { 043 while (keep_going) { 044 max_mem_usage = Math.max(max_mem_usage, mem_usage()); 045 } 046 } 047 048 public void end_of_iteration( 049 String pptName, 050 int num_samples, 051 int num_static_vars, 052 int num_orig_vars, 053 int num_scalar_vars, 054 int num_array_vars, 055 int num_derived_scalar_vars, 056 int num_derived_array_vars) { 057 058 try (PrintWriter fout = 059 new PrintWriter(Files.newBufferedWriter(Paths.get(filename), UTF_8, CREATE, APPEND))) { 060 061 fout.print(pptName + ", " + max_mem_usage + ", " + num_samples + ", "); 062 fout.print(num_static_vars + ", " + num_orig_vars + ", " + num_scalar_vars + ", "); 063 fout.println(num_array_vars + ", " + num_derived_scalar_vars + ", " + num_derived_array_vars); 064 065 max_mem_usage = mem_usage(); 066 } catch (java.io.IOException e) { 067 System.out.println("could not open " + filename); 068 } 069 } 070 071 public void stop() { 072 keep_going = false; 073 } 074}