您的位置:首页 > 编程语言 > Java开发

java之虚拟机详解

2016-06-24 16:48 253 查看
        java虚拟机即在机器和程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口,这样编译程序只需要生成虚拟机能够理解的代码即可,虚拟机接收到代码后,由其内部的解释器将代码转换为特定系统(windows,linux等系统)的机器码执行。这就解释了java的跨平台,想起了那时刚学习java老师说的:一次编译,到处运行。能这么NB多亏了解释器,解释给各个特定机器。

        举个简单的例子,香港人只懂粤语,河南人只能听懂豫语,上海人只能听懂沪语,习大大(上海人,沪语-假设编者没有地域偏见)这个村长要通过村里喇叭开会,如何才能是三个地方的人都听懂呢?习大大用普通话叙述,而三个地方的人都带有语言解析器,例如河南人带的解析器可以将普通话转化为豫语,其他类似。这样大会就可以完整召开了。

      上述例子中,普通话就是.class文件,语言解析器就是java虚拟机。

      下面看一下java_andy给出的详细过程

      *.java→*.class→机器码→java编译器 (编译) → 虚拟机(解释执行) →  解释器(翻译) → 机器码

     

java中,类加载器把一个类装入java虚拟机需要经过三个步骤来完成:装载、链接、初始化。其中链接又分为校验、准备、解析过程

装载:查找和导入.class文件

链接:检查装入.class文件的正确性,然后,java虚拟机为变量分配内存,设置默认值。

初始化:把符号引用变成直接引用....

1 public class  Main {
2
3 private static int size=1;
4
5 public static void main(String args[]) {
6
7 User u = new User();
8
9 u.setName("李文水");
10
11 u.setPwd("159");
12
13 String name = u.getName();
14
15 String pwd = u.getPwd();
16
17 u = null;
18
19 }
20
21 }
22
23 public class User {
24
25 private String name;
26
27 private String pwd;
28
29 public String getName() {
30
31 return name;
32
33 }
34
35 public void setName(String name) {
36
37 this.name = name;
38
39 }
40
41 public String getPwd() {
42
43 return pwd;
44
45 }
46
47 public void setPwd(String pwd) {
48
49 this.pwd = pwd;
50
51 }
52
53 }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java