本帖最后由 大蓝鲸小蟀锅 于 2017-12-22 21:52 编辑
大家好我又来了,今天我们探讨下对jvm和工作原理的理解,JVM是Java程序运行的平台,它就像一台虚拟出来的计算机一样,负责执行Java编译好的字节码文件。JVM具有非常严格的实现规范,大多数操作系统都可以安装JVM,为Java语言的跨平台性起到了关键的作用。
JVM(Java虚拟机)是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,堆栈,寄存器等,还具有相应的指令系统。 说明: JVM有很多个实现,目前用的比较多得就是Sun公司提供的JRE的JVM,另外,IBM,BEA等公司都有自己的JVM实现。 Java语言的一个非常的特点就是与平台的无关性。而使用Java虚拟机是实现这一个特点的关键。它就好像一张毯子,铺在具体操作系统平台的上面,垫在Java语言的下面。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码,而引入Java语言虚拟机后,Java语言在不同平台运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需要生成在java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改的运行。Java虚拟机在执行字节码时,再把字节码解释成具体平台上的机器指令执行。 下面通过一个具体的例子来分析它的运行过程。虚拟机通过调用某个指定类的方法main()启动,传递给main()一个字符串数组参数,使指定的类被加载,同时链接该类所使用的其他的类,接口等,并且初始化它们,最后执行方法中的代码,实例代码如 - class HelloApp{
- public static void main(String[] args) {
- System.out.println("HelloWorld");
- for (int i = 0; i < args.length; i++) {
- System.out.println(args);
- }
- }
- }
编译后在命令模式下输入以下代码: JavaHelloApp run virtual machine 上面代码通过调用HelloApp的main方法来启动Java虚拟机,传递给main一个包含3个字符串run,virtual,machine的数组。 开始试图执行类HelloApp的main方法的时候,发现该类并没有被加载,也就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoder试图寻找这样的二进制代表。如果这个进程失败,会抛出一个异常。类被装载后同时在main方法被调用之前,必须对类HelloApp与其他类型进行链接并且初始化,类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。然后执行main方法的代码,直至方法被执行完毕。 可以这样回答: JVM是一种使用软件模拟出来的计算机,它用于执行Java程序,有一套非常严格的技术规范,是Java跨平台的依赖基础。Java虚拟机有自己想象中的硬件,如处理器,堆栈,寄存器等,还有相应的指令系统它允许Java程序就好像一台计算机允许c或c++程序一样。
|