// Original file:/home/abdulaziz/Desktop/BerkeleyDb/all_feature_try/base/com/sleepycat/je/dbi/MemoryBudget.java
class MemoryBudget {
  @MethodObject static class MemoryBudget_sinit {
      void execute(){
        this.hook348();
      }
      protected boolean is64;
      protected boolean isJVM14;
      protected String overrideArch;
      protected String arch;
      protected RuntimeException RE;
      protected void hook348(){
      }
    }
  @MethodObject static class MemoryBudget_reset {
      MemoryBudget_reset(    MemoryBudget _this,    DbConfigManager configManager){
        this._this=_this;
        this.configManager=configManager;
      }
      void execute() throws DatabaseException {
        newMaxMemory=configManager.getLong(EnvironmentParams.MAX_MEMORY);
        jvmMemory=_this.getRuntimeMaxMemory();
        if (newMaxMemory != 0) {
          if (jvmMemory < newMaxMemory) {
            throw new IllegalArgumentException(EnvironmentParams.MAX_MEMORY.getName() + " has a value of " + newMaxMemory+ " but the JVM is only configured for "+ jvmMemory+ ". Consider using je.maxMemoryPercent.");
          }
          if (newMaxMemory < _this.MIN_MAX_MEMORY_SIZE) {
            throw new IllegalArgumentException(EnvironmentParams.MAX_MEMORY.getName() + " is " + newMaxMemory+ " which is less than the minimum: "+ _this.MIN_MAX_MEMORY_SIZE);
          }
        }
   else {
          if (jvmMemory == Long.MAX_VALUE) {
            jvmMemory=_this.N_64MB;
          }
          maxMemoryPercent=configManager.getInt(EnvironmentParams.MAX_MEMORY_PERCENT);
          newMaxMemory=(maxMemoryPercent * jvmMemory) / 100;
        }
        newLogBufferBudget=configManager.getLong(EnvironmentParams.LOG_MEM_SIZE);
        if (newLogBufferBudget == 0) {
          newLogBufferBudget=newMaxMemory >> 4;
        }
   else       if (newLogBufferBudget > newMaxMemory / 2) {
          newLogBufferBudget=newMaxMemory / 2;
        }
        numBuffers=configManager.getInt(EnvironmentParams.NUM_LOG_BUFFERS);
        startingBufferSize=newLogBufferBudget / numBuffers;
        logBufferSize=configManager.getInt(EnvironmentParams.LOG_BUFFER_MAX_SIZE);
        if (startingBufferSize > logBufferSize) {
          startingBufferSize=logBufferSize;
          newLogBufferBudget=numBuffers * startingBufferSize;
        }
   else       if (startingBufferSize < EnvironmentParams.MIN_LOG_BUFFER_SIZE) {
          startingBufferSize=EnvironmentParams.MIN_LOG_BUFFER_SIZE;
          newLogBufferBudget=numBuffers * startingBufferSize;
        }
        this.hook350();
        newTrackerBudget=(newMaxMemory * _this.envImpl.getConfigManager().getInt(EnvironmentParams.CLEANER_DETAIL_MAX_MEMORY_PERCENTAGE)) / 100;
        _this.maxMemory=newMaxMemory;
        this.hook349();
        _this.logBufferBudget=newLogBufferBudget;
      }
      protected MemoryBudget _this;
      protected DbConfigManager configManager;
      protected long newMaxMemory;
      protected long jvmMemory;
      protected int maxMemoryPercent;
      protected long newLogBufferBudget;
      protected int numBuffers;
      protected long startingBufferSize;
      protected int logBufferSize;
      protected long newCriticalThreshold;
      protected long newTrackerBudget;
      protected void hook349() throws DatabaseException {
      }
      protected void hook350() throws DatabaseException {
      }
    }
}
