深入JVM一(走近JVM)
感觉JVM这个东西很深澳,网上也很少有这方面的资料,最近有兴趣就打算开始研究起来,做好笔记,以后回来再看。
注:实验的环境为:1.6.0_10-rc2

?
下面是JDK提供的帮助文档上一名话,我简单翻译了一下:
原文如下:

?
我的翻译:
1、JDK提供了一种或多种JVM的实现
下面我们针对JDK帮助文档上说的这2句话来做测试:
STEP1:
打开命令提示符,输入java【确保已经配置好环境变量】
?

大家请看红色框部分。当我们启动一个JAVA程序的时候,可以选择用Client和Server虚拟机。
OK,到这里大家对JVM的2种实现有基本了解,下面我们就写一个程序来试一试,分别让client和server这2个虚拟机来执行我们的程序:
第一步:
新建一个java文件,敲入以下代码:
第二步:编译这个文件:
原文件:
编译:
第三步:用HotSpot?client?VM来执行上面的程序,如下图:
大家可以看到,结果正确的执行了。
第四步:用HotSpot?server?VM来执行上面的程序,如下图:
这个时候出现一个error,告诉我们没有server?JVM,这是由于什么原因呢,在下面的例子中,我会给大家解释,呵呵。
二、到底有几个JVM
我们自己写的一个JAVA程序运行的时候,到底是哪个JVM来为我们服务的?不知道大家有没有想过这个问题?系统中有几个JVM,他们之间有联系吗?还是系统只存在一个JVM,所有的程序都由这个JVM来执行。
要解决这个问题,我想要用到二个JAVA提供的工具。
在命令行敲入Jvisualvm:
会出现以下界面:
大家可以看到有一个local和remote选项,
Local:表示本地的JVM列表。
Remote:表示远程的JVM列表。
Snapshots:请看后方,本节不介绍。
如果你本地没有启动其它的JAVA应用程序,Local下面默认就只有一个JVM列表,(JVM)。这个就是当前运行Jvisualvm命令出来的窗口,这个程序本身也是JAVA语言写的。
双击这个JVM,会出现如下图所示:
我们改一下我们刚刚写的那个程序,代码如下:
再编译运行这个程序,注意观察VisualVM里的变化:大家可以看到会多出一个正在运行的JVM。
总结:一个应用程序会对应一个JVM,当我们启动一个JAVA程序的时候,JDK会为我们分配一个JVM来执行程序。
?
提示:
在windows系统上,启动JvisualVm的时候可能会出现如下图所示错误:
?
大家可以点击这个链接,里面有关系错误的详细说明,出现这种情况可能有2种原因:
1、系统权限不够。
2、安装JDK的盘是fat格式的
?
?
如果你喜欢这个文档,你可以下载保存







