`
coolbi
  • 浏览: 83254 次
  • 性别: Icon_minigender_1
  • 来自: 重庆&南京
社区版块
存档分类
最新评论

深入JVM一(走近JVM)

阅读更多

一、走近JVM

感觉JVM 这个东西很深澳,网上也很少有这方面的资料,最近有兴趣就打算开始研究起来,做好笔记,以后回来再看。

注:实验的环境为:1.6.0_10-rc2


 

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

原文如下:


 

我的翻译:

1、 JDK提供了一种或多种 JVM 的实现

l JAVA HotSpot Client VM

2 JAVA HotSpot Server VM

 

下面我们针对JDK 帮助文档上说的这 2 句话来做测试:

STEP1:

打开命令提示符,输入java 【确保已经配置好环境变量】

 


大家请看红色框部分。当我们启动一个JAVA 程序的时候,可以选择用 Client Server 虚拟机。

OK,到这里大家对 JVM 2 种实现有基本了解,下面我们就写一个程序来试一试,分别让 client server 2 个虚拟机来执行我们的程序:

第一步:

新建一个java 文件,敲入以下代码:


public class JVMTest
{
	public static void main(String args[])
	{
		System.out.println("Hello JVM");
	}
}
 

第二步:

编译这个文件:

原文件:

编译:


第三步:用HotSpot client VM 来执行上面的程序,如下图:


大家可以看到,结果正确的执行了。

第四步:用 HotSpot server VM来执行上面的程序,如下图:


这个时候出现一个 error,告诉我们没有 server JVM, 这是由于什么原因呢,在下面的例子中,我会给大家解释,呵呵。

二、 到底有几个JVM

我们自己写的一个JAVA 程序运行的时候,到底是哪个 JVM 来为我们服务的?不知道大家有没有想过这个问题?系统中有几个 JVM ,他们之间有联系吗?还是系统只存在一个 JVM ,所有的程序都由这个 JVM 来执行。

要解决这个问题,我想要用到二个JAVA 提供的工具。

Jvisualvm

在命令行敲入Jvisualvm


会出现以下界面:


大家可以看到有一个 local remote 选项,

Local:表示本地的 JVM 列表。

Remote:表示远程的 JVM 列表。

Snapshots:请看后方,本节不介绍。

如果你本地没有启动其它的JAVA 应用程序, Local 下面默认就只有一个 JVM 列表,( JVM )。这个就是当前运行 Jvisualvm 命令出来的窗口,这个程序本身也是 JAVA 语言写的。

双击这个JVM ,会出现如下图所示:


我们改一下我们刚刚写的那个程序,代码如下:

public class JVMTest
{
	public static void main(String args[])
	{
		for(int i=0;i<Integer.MAX_VALUE;i++)
		{
			System.out.println("Hello JVM");
		}
	}
}
 

再编译运行这个程序, 注意观察 VisualVM 里的变化:

大家可以看到会多出一个正在运行的JVM

总结:一个应用程序会对应一个JVM ,当我们启动一个 JAVA 程序的时候, JDK 会为我们分配一个 JVM 来执行程序。

 

提示:

windows 系统上,启动 JvisualVm 的时候可能会出现如下图所示错误:


 

大家可以点击这个链接,里面有关系错误的详细说明,出现这种情况可能有2 种原因:

1、系统权限不够。

2、安装 JDK 的盘是 fat 格式的

 

 

如果你喜欢这个文档,你可以下载保存

  • 大小: 4.3 KB
  • 大小: 45 KB
  • 大小: 3.6 KB
  • 大小: 4.8 KB
  • 大小: 6.2 KB
  • 大小: 1.4 KB
  • 大小: 9.7 KB
  • 大小: 879 Bytes
  • 大小: 131.3 KB
  • 大小: 139.8 KB
  • 大小: 11.9 KB
  • JVM.pdf (255.6 KB)
  • 下载次数: 49
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics