在google、baidu中输入关键字,出现的链接大部分都是关于:
1、jdk提供java 命令参数说明
2、eclipse启动参数配置(即eclipse.ini文件的配置)
很少有一篇文章对这些参数在各个环境中的配置进行一个整体上的总结。故小生在此故弄玄虚一把,请各位牛哥们指教
一、先着手用两种方式整一个demo(very very easy)
(1)用EditPlus+Jdk提供的命令手动运行java应用程序
Main.java类文件如下(Runtime类随后介绍):
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
long maxMemory = runtime.maxMemory();
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
System.out.println("maxMemory: "+maxMemory);
System.out.println("totalMemory: "+totalMemory);
System.out.println("freeMemory: "+freeMemory);
/* output:
maxMemory: 66650112
totalMemory: 5177344
freeMemory: 4955880
maxMemory: 399572992
totalMemory: 104071168
freeMemory: 103778776
*/
}
}
由于本人机器没配置jdk环境变量,故直接到javac、java命令所在路径:C:Program FilesJavajdk1.6.0_10in(根据您安装的jdk目录而定)
运行以下命令:javac Main.java,得到Main.class文件
再运行以下命令:java -Xms100m -Xmx384m Main,输出截图如下:
注意:命令:java -Xms100m -Xmx384m Main中的-Xms100m -Xmx384m即是指定你应用程序运行时,jvm的堆内存情况
详细参数说明,可以参看博客:http://developer.51cto.com/art/201009/227518.htm
(2)利用eclipse,这个业界火得不能再火的"日食"IDE工具来整下:
这个不用多讲,截图如下:
在eclipse中配置jvm运行时参数过程如下(截图):
Window —> Preferences --> Java --> Installed JREs -->选中运行java程序的所使用的jdk,配置如下:
二、利用 “永恒之道” 的 Java API分析下程序中的Runtime类
API原文:http://docs.oracle.com/javase/7/docs/api/
Runtime类概要:
每一个应用程序都有Runtime类一个单独的实例,通过此类的实例,应用程序能够与其运行的环境进行一些交互。
注意:此类的实例,应用程序无法创建,只能通过getRunTime得到(即Runtime.getRuntime())
以下对maxMemory()、totalMemory()、freeMemory()进行简要说明:
maxMemory():获取jvm能够尝试获取的最大堆内存空间(即上面配置的-Xms384m)
totalMemory():获取jvm已经分配到总的堆内存空间
freeMemory():获取jvm已经分配到的剩余堆内存空间
所以,最大可利用的堆内存=maxMemory() -totalMemory() +freeMemory()
三、个人总结以及感悟
以前一直认为:配置eclispe.ini,就已经配置了我们所编写的application运行时jvm的堆内存。(现在才知道我错的好离谱)
其实,配置eclipse.ini只是配置了eclipse运行时的jvm堆内存(eclispe是一个java程序)。
所以,对于我,总结只有三个字:我很傻
四、引申:
各位乡亲姐妹们还想进一步深入,可以看看jvm的虚拟机相关的文章或书本,在此推荐:《深入Java 虚拟机》、《深入理解java虚拟机:jvm高级特性与最佳实践》。
对jvm内部原理,在此就不赘述了
了