java

位置:IT落伍者 >> java >> 浏览文章

透过 Java 参数来改善 Java 效能


发布日期:2024年07月23日
 
透过 Java 参数来改善 Java 效能

透过 Java 参数来改善 Java 效能

作者 : 艾群科技 萧松瀛

我们都知道 Java 在执行的时候会吃掉不少记忆体而当记忆体不够用的时候 JVM 会向系统要求更大的记忆体来使用但是实际上对于 Java 来说我们会发现资料可以存在许多不同的地方其中有两个重要的是 Heap 以及 Stack 这两者有什么差别我们在以后会提到但是在这之前我们先来看一个程式

public class testHeap

{

public static void main(String argv[])

{

StringBuffer sb = new StringBuffer();

long starttime;

long endtime;

starttime = SystemcurrentTimeMillis();

for(int i=; 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

Time:

在这里我们看到 totalMemory 不断的上升当然这是正常现象

是实际上我们可以控制 JVM 一开始就抓取的记忆体大小这样的好处是

JVM 一开始就抓取了大量的 Heap 怎么做呢? 我们先用 java X 来看

看他有哪些额外的参数可以下没错我看到我感兴趣的几个参数

Xms set initial Java heap size

Xmx set maximum Java heap size

Xss set java thread stack size

接着我想要让 JVM 一开始就抓取大量的记忆体因此我选择 Xms 这

个参数底下是我的执行结果

C:\java\tmp> java Xms testHeap

Time:

这时候我们看到 total 的记忆体维持不变原因很简单因为 testHeap

使用记忆体的量并没有超过我们一开始抓到的量但是有一个很有趣的现象是循环内的时间已经更短了换一个角度来说就是程式跑起来更有效率这种以记忆体空间来换取执行时间的方式也许并不是最棒的校

调方法但是却是一个在不修改程式码的方式下提高效率的方法当然我们也可以限制记忆体的最大用量参数则为 Xmx 一般说来我并不建议您设定 Xmx 原因很简单因为一旦您设定了 Xmx 那么 JVM 所抓取的记忆体量到了这个值之后便不会再抓取记忆体也就是说您的程式将无法执行我们看看底下的结果

C:\java\tmp> java Xmx testHeap

Exception in thread main javalangOutOfMemoryError

C:\java\tmp>

               

上一篇:用java api进行sort

下一篇:优化JAVA性能