马上就要找实习了,趁着现在有时间,做个小小的面试总结,部分原创,大部分是在网上搜集。
1 什么是java虚拟机(Java Virtual Machine)?
java虚拟机是一种抽象化虚拟的计算机,java虚拟机有完善的一套硬体架构,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。java虚拟机屏蔽了当前使用的操作系统平台的相关信息,使得java程序只需生成相关的java字节码文件(class文件)便可在多平台运行。
java的一个非常重要的特性就是与平台的无关性。
一般的高级语言如C语言,如果要运行程序,需要经过编译成不同的目标代码。而java虚拟机在不同的平台上不需要编译即可运行程序。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
Java虚拟机支持Java语言的基本数据类型有8种,注意String(引用类型)不是基本数据类型如下:
byte、short、int、long、float、double、char、boolean。
指令系统
Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,操作数进紧随在操作码的后面,其长度根据需要而不同。操作码用于指定一条指令操作的性质(在这里我们采用汇编符号的形式进行说明),如iload表示从存储器中装入一个整数。Java的8位操作码的长度使得JVM最多有256种指令,java1.6及以上版本已使用了160多种操作码。
寄存器
JVM只设置了4个最为常用的寄存器。它们是:pc程序计数器optop操作数栈顶指针frame当前执行环境指针 vars指向当前执行环境中第一个局部变量的指针 所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。
栈结构
作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:局部变量,执行环境,操作数栈。
碎片回收堆(垃圾回收站)
存储区
java虚拟机运行过程
步骤:1:编写java程序,生成.java文件 2:编译java文件生成字节码文件(class文件) 3:装载、连接、初始化数据 4:类实例生成,垃圾回收。
从虚拟机的角度,最开始是面对的class文件,读入并解析class文件,将PC寄存器设置为main入口,然后开始执行字节码。字节码总是针对运算栈的,所以虚拟机知道操作数就在运算栈那里。字节码由操作符和操作数定义,操作数可能为Java栈的局部变量,可能为常量池的引用。如果是常量池的引用,并且还未解析,则需要进行解析。任何时候,栈中都是基本变量或者对象引用,按部就班执行就行了。
ps:此图为转载