重复的Java运行时选项:首选项的顺序是什么?
考虑下面的命令行
java -Xms128m -Xms256m myapp.jar
JVM最小内存( Xms
选项)适用于哪些设置:128m或256m?
取决于JVM,也许是版本…也许甚至在你的桌上有多less个回形针。 它甚至可能不工作。 不要这样做。
如果出于某种原因无法控制,请按照运行jar的相同方式进行编译和运行。 但是要警告,依靠选项的顺序是一个非常糟糕的主意。
public class TotalMemory { public static void main(String[] args) { System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory()); System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory()); } }
IBM JVM将参数的最右侧实例视为优胜者。 我不能说HotSpot等。
我们这样做是因为从batch file中经常存在深层嵌套的命令行,人们只能将其添加到最后,并且想要成为赢家。
像往常一样,检查你本地的JVM的具体实现,但是这里是一个快速的方法来检查从命令行,而不必编码。
> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) uintx MaxHeapSize := 2147483648 {product}
所以,在这种情况下,参数(2G)的第二个实例是优先的(至less在1.8),这也是我对其他大多数现代版本的经验。
FTR,OpenJDK 1.7似乎也采取最右边的价值,至less为-XMS。
我敢打赌这是第二个。 参数通常按以下顺序处理:
for( int i=0; i<argc; i++ ) { process_argument(argv[i]); }
但是,如果我正在写java参数parsing器,我会抱怨冲突的参数。
- 将string数组转换为java.util.List
- 在Intellij中清除代码覆盖信息
- 没有Hibernate Session绑定到线程,configuration不允许在这里创build非事务性的
- 了解Java 8中的Spliterator,Collector和Stream
- 在Java中CharSequence VSstring?
- JSF,Servlet和JSP有什么区别?
- 如何解决“java.net.BindException:已经在使用的地址:JVM_Bind”错误?
- JFileChooser.showSaveDialog(…) – 如何设置build议的文件名
- 生成.equals()时比get instance()优先于instanceof的任何理由?