当前位置: 首页 > 图灵资讯 > 技术篇> Java 参数来改善 Java 效能

Java 参数来改善 Java 效能

来源:图灵教育
时间:2024-02-22 14:38:52

  我们都知道, Java 执行时会吃掉很多记忆体,而当记忆体不够时, JVM 要求系统使用更大的记忆体。

  但实际上是对的 Java 就数据而言,我们会发现有许多不同的地方,其中两个很重要 Heap 以及 Stack 。我们以后会提到两者的区别,但在此之前,让我们先看一个程式: public class testHeap { public static void main(String argv[]) { StringBuffer sb = new StringBuffer(); long starttime; long endtime; starttime = System.currentTimeMillis(); for(int i=0; i <=100000; i++) { sb.append(i).append("hello").append(i); if(i % (100000/2) == 0) { System.out.println(Runtime.getRuntime().totalMemory()); } } endtime = System.currentTimeMillis(); System.out.println("Time: "+(endtime-starttime)); } } 执行结果如下 C:\java\tmp> java testHeap 2031616 5578752 10498048 Time: 651 在这里,我们看到 totalMemory 当然,这是正常现象,但实际上我们可以控制它 JVM 记忆体的大小从一开始就被抓住了。这样做的好处是 JVM 从一开始就抓了很多 Heap 。怎么做呢?

  我们先用 java -X 我们来看看他有哪些额外的参数可以下来,是的,我看到了我感兴趣的几个参数 -Xms <size> set initial Java heap size -Xmx <size> set maximum Java heap size -Xss <size> set java thread stack size 接着,我想要让 JVM 我从一开始就抓住了很多记忆,所以我选择了 -Xms 这个参数,以下是我的执行结果: C:\java\tmp> java -Xms50000000 testHeap 49741824 49741824 49741824 Time: 480 这时我们看到了 total 原因很简单,记忆体保持不变,因为 testHeap 使用记忆体的量并不超过我们一开始就抓住的量。但有一个有趣的现象是,回到圈子里的时间已经更短了。从另一个角度来看,程序运行更有效。然而,有一个非常有趣的现象是,回到圆圈的时间更短。从另一个角度来看,程序运行更有效。这种用记忆空间换取执行时间的方法可能不是最好的校准方法,但它是一种提高效率的方法,而不修改程式代码。当然,我们也可以限制记忆体的最大用量,而参数是 -Xmx 。一般来说,我不建议你设置它 -Xmx ,原因很简单,因为一旦你设定了, -Xmx ,那么 JVM 抓取的记忆体量达到这个值后,就不会再抓取记忆体了,也就是说你的程序将无法执行,让我们看看下面的结果 C:\java\tmp> java -Xmx5000000 testHeap 2031616 5578752 Exception in thread "main" java.lang.OutOfMemoryError C:\java\tmp>