if ( pos != -1 ){
                
                param_name = param_name.substring( 0, pos ).trim();
              }
              
              MessageBoxShell mb = 
                new MessageBoxShell( 
                  SWT.ICON_ERROR | SWT.OK,
                  MessageText.getString( "ConfigView.section.invalid.value.title"),
                  MessageText.getString( 
                    "ConfigView.section.invalid.value", 
                    new String[]{ val, param_name, Debug.getNestedExceptionMessage(e)}));
              
                  mb.setParent( parent.getShell());
                  mb.open(null);
            }
          }
        });
      
      label = new Label(area, SWT.NULL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      label.setLayoutData(gridData);
      
      Long max_heap_mb = AEMemoryMonitor.getMaxHeapMB();
      
      if ( max_heap_mb > 0 ){
        
        Messages.setLanguageText(label,  "jvm.max.mem.current", new String[]{ DisplayFormatters.formatByteCountToKiBEtc( max_heap_mb*1024*1024, true )});
      }
    }
    
    {
        // min mem
      
      final int MIN_MIN_JVM = 8*1024*1024;
  
      long  min_mem = AEMemoryMonitor.getJVMLongOption( options, "-Xms" );
  
      GridData gridData = new GridData();
      Label label = new Label(area, SWT.NULL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(label,  "jvm.min.mem", new String[]{encodeDisplayLong(MIN_MIN_JVM)});
  
      gridData = new GridData();
      gridData.widthHint = 125;
      final StringParameter min_vm = new StringParameter(area, "jvm.min.mem", "", false );
      min_vm.setLayoutData(gridData);
        
      min_vm.setValue( min_mem == -1?"":encodeDisplayLong( min_mem ));
      
      min_vm.addChangeListener(
        new ParameterChangeAdapter()
        {
          private String  last_value;
          
          public void
          parameterChanged(
            Parameter  p,
            boolean    caused_internally )
          {
            if ( min_vm.isDisposed()){
              
              min_vm.removeChangeListener( this );
              
              return;
            }
            
            String val = min_vm.getValue();
            
            if ( last_value != null && last_value.equals( val )){
              
              return;
            }
            
            last_value = val;
                      
            try{
              long min_mem = decodeDisplayLong( val );
              
              if ( min_mem < MIN_MIN_JVM ){
                
                throw( new Exception( "Min=" + encodeDisplayLong( MIN_MIN_JVM )));
              }
                          
              String[] options = platform.getExplicitVMOptions();
              
              options = AEMemoryMonitor.setJVMLongOption( options, "-Xms", min_mem );
  
              long  max_mem = AEMemoryMonitor.getJVMLongOption( options, "-Xmx" );
  
              if ( max_mem == -1 || max_mem < min_mem ){
                
                options = AEMemoryMonitor.setJVMLongOption( options, "-Xmx", min_mem );
              }
              
              platform.setExplicitVMOptions( options );
              
              buildOptions( parent, platform, area, true );
              
            }catch( Throwable e ){
              
              String param_name = MessageText.getString( "jvm.min.mem" );
              
              int  pos = param_name.indexOf( '[' );
              
              if ( pos != -1 ){
                
                param_name = param_name.substring( 0, pos ).trim();
              }
              
              MessageBoxShell mb = 
                new MessageBoxShell( 
                  SWT.ICON_ERROR | SWT.OK,
                  MessageText.getString( "ConfigView.section.invalid.value.title"),
                  MessageText.getString( 
                    "ConfigView.section.invalid.value", 
                    new String[]{ val, param_name, Debug.getNestedExceptionMessage(e)}));
              
                  mb.setParent( parent.getShell());
                  mb.open(null);
            }
          }
        });
      
      label = new Label(area, SWT.NULL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      label.setLayoutData(gridData);
    }
    
    {
        // max DIRECT mem
      
      final int MIN_DIRECT_JVM = 32*1024*1024;
      
      final String OPTION_KEY = "-XX:MaxDirectMemorySize=";
      
      long  max_direct = AEMemoryMonitor.getJVMLongOption( options, OPTION_KEY );
  
      GridData gridData = new GridData();
      Label label = new Label(area, SWT.NULL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(label,  "jvm.max.direct.mem", new String[]{encodeDisplayLong(MIN_DIRECT_JVM)});
  
      gridData = new GridData();
      gridData.widthHint = 125;
      final StringParameter max_direct_vm = new StringParameter(area, "jvm.max.direct.mem", "", false );
      max_direct_vm.setLayoutData(gridData);
        
      max_direct_vm.setValue( max_direct == -1?"":encodeDisplayLong( max_direct ));
      
      max_direct_vm.addChangeListener(
        new ParameterChangeAdapter()
        {
          private String  last_value;
          
          public void
          parameterChanged(
            Parameter  p,
            boolean    caused_internally )
          {
            if ( max_direct_vm.isDisposed()){
              
              max_direct_vm.removeChangeListener( this );
              
              return;
            }
            
            String val = max_direct_vm.getValue();
            
            if ( last_value != null && last_value.equals( val )){
              
              return;
            }
            
            last_value = val;
                      
            try{
              long max_direct = decodeDisplayLong( val );
              
              if ( max_direct < MIN_DIRECT_JVM ){
                
                throw( new Exception( "Min=" + encodeDisplayLong( MIN_DIRECT_JVM )));
              }
                          
              String[] options = platform.getExplicitVMOptions();
              
              options = AEMemoryMonitor.setJVMLongOption( options, OPTION_KEY, max_direct );
                
              platform.setExplicitVMOptions( options );
              
              buildOptions( parent, platform, area, true );
              
            }catch( Throwable e ){
              
              String param_name = MessageText.getString( "jvm.max.direct.mem" );
              
              int  pos = param_name.indexOf( '[' );
              
              if ( pos != -1 ){
                
                param_name = param_name.substring( 0, pos ).trim();
              }
              
              MessageBoxShell mb = 
                new MessageBoxShell( 
                  SWT.ICON_ERROR | SWT.OK,
                  MessageText.getString( "ConfigView.section.invalid.value.title"),
                  MessageText.getString( 
                    "ConfigView.section.invalid.value", 
                    new String[]{ val, param_name, Debug.getNestedExceptionMessage(e)}));
              
                  mb.setParent( parent.getShell());
                  mb.open(null);
            }
          }
        });
      
      label = new Label(area, SWT.NULL);