+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.bin;
/**
* @author bsoares
*
*/
+import java.util.Locale;
+
public class MemorySetting
{
public static final String MAX_HEAPSIZE_PERCENT_PROPERTY_NAME = "jvmmempc";
private static final long GIGABYTE = 1073741824; // 1GB
- public static final long LEAVE_FREE_MIN_MEMORY = GIGABYTE/2;
+ public static final long LEAVE_FREE_MIN_MEMORY = GIGABYTE / 2;
- public static final long APPLICATION_MIN_MEMORY = GIGABYTE/2;
+ public static final long APPLICATION_MIN_MEMORY = GIGABYTE / 2;
private static final long MAX_HEAPSIZE_GB_DEFAULT = 32;
* values: jvmmempc - the maximum percentage of total physical memory to
* allocate, and jvmmemmax - the maximum absolute amount of physical memory to
* allocate. These can be provided as arguments. If not provided as arguments
- * (or set as null) system properties will be used instead (if set). The memory
- * setting returned will be the lower of the two values. If either of the values
- * are not provided then defaults will be used (jvmmempc=90, jvmmemmax=32GB). If
- * total physical memory can't be ascertained when jvmmempc was set or neither
- * jvmmempc nor jvmmemmax were set, then jvmmemmax defaults to a much safer 8GB.
- * In this case explicitly setting jvmmemmax and not setting jvmmempc can set a
- * higher memory for Jalview. The calculation also tries to ensure 0.5GB memory
- * for the OS, but also tries to ensure at least 0.5GB memory for Jalview (which
- * takes priority over the OS) If there is less then 0.5GB of physical memory
- * then the total physical memory is used for Jalview.
+ * (or set as null) system properties will be used instead (if set). The
+ * memory setting returned will be the lower of the two values. If either of
+ * the values are not provided then defaults will be used (jvmmempc=90,
+ * jvmmemmax=32GB). If total physical memory can't be ascertained when
+ * jvmmempc was set or neither jvmmempc nor jvmmemmax were set, then jvmmemmax
+ * defaults to a much safer 8GB. In this case explicitly setting jvmmemmax and
+ * not setting jvmmempc can set a higher memory for Jalview. The calculation
+ * also tries to ensure 0.5GB memory for the OS, but also tries to ensure at
+ * least 0.5GB memory for Jalview (which takes priority over the OS) If there
+ * is less then 0.5GB of physical memory then the total physical memory is
+ * used for Jalview.
*
* @param jvmmemmaxarg
- * Maximum value of memory to set. This can be a numeric
- * string optionally followed by "b", "k", "m", "g", "t"
- * (case insensitive) to indicate bytes, kilobytes,
- * megabytes, gigabytes, terabytes respectively. If null a
- * default value of 32G will be used. If null and either
- * physical memory can't be determined then the default is
- * 8GB.
+ * Maximum value of memory to set. This can be a numeric string
+ * optionally followed by "b", "k", "m", "g", "t" (case insensitive)
+ * to indicate bytes, kilobytes, megabytes, gigabytes, terabytes
+ * respectively. If null a default value of 32G will be used. If null
+ * and either physical memory can't be determined then the default is
+ * 8GB.
* @param jvmmempcarg
- * Max percentage of physical memory to use. Defaults to
- * "90".
+ * Max percentage of physical memory to use. Defaults to "90".
*
* @return The amount of memory (in bytes) to allocate to Jalview
*/
if (jvmmemmax != null && jvmmemmax.length() > 0)
{
long multiplier = 1;
- switch (jvmmemmax.toLowerCase().substring(jvmmemmax.length() - 1))
+ switch (jvmmemmax.toLowerCase(Locale.ROOT).substring(jvmmemmax.length() - 1))
{
case "t":
multiplier = 1099511627776L; // 2^40
{
memmax = MAX_HEAPSIZE_GB_DEFAULT * GIGABYTE;
System.out.println("MemorySetting Property '"
- + MAX_HEAPSIZE_PROPERTY_NAME
- + "' ("
- + jvmmemmaxarg + "') badly formatted, using default ("
+ + MAX_HEAPSIZE_PROPERTY_NAME + "' (" + jvmmemmaxarg
+ + "') badly formatted, using default ("
+ MAX_HEAPSIZE_GB_DEFAULT + "g).");
}
if (Long.MAX_VALUE / memmax < multiplier)
{
memmax = MAX_HEAPSIZE_GB_DEFAULT * GIGABYTE;
- System.out.println(
- "MemorySetting Property '" + MAX_HEAPSIZE_PROPERTY_NAME + "' ("
- + jvmmemmaxarg
- + ") too big, using default ("
- + MAX_HEAPSIZE_GB_DEFAULT + "g).");
+ System.out.println("MemorySetting Property '"
+ + MAX_HEAPSIZE_PROPERTY_NAME + "' (" + jvmmemmaxarg
+ + ") too big, using default (" + MAX_HEAPSIZE_GB_DEFAULT
+ + "g).");
}
else
{
if (memmax < APPLICATION_MIN_MEMORY)
{
memmax = APPLICATION_MIN_MEMORY;
- System.out.println(
- "MemorySetting Property '" + MAX_HEAPSIZE_PROPERTY_NAME + "' ("
- + jvmmemmaxarg
- + ") too small, using minimum ("
- + APPLICATION_MIN_MEMORY + ").");
+ System.out.println("MemorySetting Property '"
+ + MAX_HEAPSIZE_PROPERTY_NAME + "' (" + jvmmemmaxarg
+ + ") too small, using minimum (" + APPLICATION_MIN_MEMORY
+ + ").");
}
}
}
else
{
- System.out.println(
- "MemorySetting Property '"
- + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME
- + "' should be in range 1..100. Using default "
- + percent + "%");
+ System.out.println("MemorySetting Property '"
+ + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME
+ + "' should be in range 1..100. Using default " + percent
+ + "%");
}
}
} catch (NumberFormatException e)
{
- System.out.println(
- "MemorySetting property '" + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME
- + "' (" + jvmmempcarg + ") badly formatted");
+ System.out.println("MemorySetting property '"
+ + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME + "' (" + jvmmempcarg
+ + ") badly formatted");
}
// catch everything in case of no com.sun.management.OperatingSystemMXBean
else
{
System.out.println("MemorySetting Property '"
- + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME + "' (" + jvmmempcarg
- + ") too small. Using minimum (" + APPLICATION_MIN_MEMORY
- + ").");
+ + MAX_HEAPSIZE_PERCENT_PROPERTY_NAME + "' ("
+ + jvmmempcarg + ") too small. Using minimum ("
+ + APPLICATION_MIN_MEMORY + ").");
}
mempc = APPLICATION_MIN_MEMORY;
}
// jvmmempc was set OR neither jvmmempc nor jvmmemmax were set), let's cap
// maxMemLong to 8GB
if (memoryPercentError && mempc == -1
- && !(jvmmempcarg == null && jvmmemmaxarg != null) // the same as (jvmmempcarg != null || (jvmmempcarg == null && jvmmemmaxarg
+ && !(jvmmempcarg == null && jvmmemmaxarg != null) // the same as
+ // (jvmmempcarg !=
+ // null ||
+ // (jvmmempcarg ==
+ // null &&
+ // jvmmemmaxarg
// == null))
&& memmax > NOMEM_MAX_HEAPSIZE_GB_DEFAULT * GIGABYTE)
{