package com.fourinone; import java.text.DecimalFormat; public class ClosetoOverException extends ServiceException { private double tm,fm,mm; private static double safeMemoryPer = Double.parseDouble(ConfigContext.getConfig("PARK","SAFEMEMORYPER",null,"0.95")); public ClosetoOverException(double tm, double fm, double mm){ super("The capacity close to out of memory, please clear out some data!"); this.tm = tm; this.fm = fm; this.mm = mm; } public double getTm(){ return tm; } public double getFm(){ return fm; } public double getMm(){ return mm; } public String print(){ return print(tm,fm,mm); } public static String print(double tm, double fm, double mm){ DecimalFormat df = new DecimalFormat("0.00"); return "tm:"+df.format(tm/(1024*1024))+"m,fm:"+df.format(fm/(1024*1024))+"m,mm:"+df.format(mm/(1024*1024))+"m"; } public static boolean checkMemCapacity() throws ClosetoOverException { double tm = new Long(Runtime.getRuntime().totalMemory()).doubleValue(); double fm = new Long(Runtime.getRuntime().freeMemory()).doubleValue(); double mm = new Long(Runtime.getRuntime().maxMemory()).doubleValue(); LogUtil.fine("[checkMemCapacity]", "[MemCapacityInfo]", print(tm, fm, mm)); if(tm/mm>safeMemoryPer&&fm/mm<1-safeMemoryPer) throw new ClosetoOverException(tm,fm,mm); return true; //return (((double)totalMemory/(double)maxMemory)>0.95&&((double)freeMemory/(double)maxMemory)<0.05)?true:false; } }