1.什么是JVM?JVM有什么用?
JVM是指Java虚拟机(Java Virtual Machine),它是一个虚拟出来的计算机环境,有自己的体系结构,包括方法区、堆、java栈,程序计数器、方法栈;运行引擎;类装载器。JVM是java实现“一次编译,多次运行”的关键,java程序编译后产生的字节码,由JVM解释成具体操作系统上的机器码去执行。
2.运行时数据区包括哪几个部分?
(1)程序计数器,即PC寄存器。PC寄存器存储了程序当前执行指令的地址。
(2)java栈。存放8种基本数据类型和对象的引用。
(3)本地方法栈。本地方法栈的作用和原理与java栈的作用和原理基本相似,只不过本地方法栈是为本地方法服务的,java栈是为java方法服务的。java方法是指由java编写的方法,编译成字节码,存储在class文件中;本地方法是指由其他语言编写的,编译成与处理器相关的机器代码,存储在dll文件中(windows系统),格式是各个平台专有的。java方法是与平台无关的,本地方法则不是。
(4)堆。存放所有new出来的对象。堆是被所有线程共享的,JVM中只有一个堆。
(5)方法区。方法区存储了类的相关信息(类的名称、方法信息、字段信息)、静态变量、常量等。方法区也是被线程共享的区域。
3.描述JVM的体系结构
JVM 的体系结构包括四个部分:类加载器、执行引擎、内存区和本地方法接口。
(1)类加载器:JVM在启动时或类运行时将class文件加载到JVM中,每个类的类型对应一个唯一的class实例,唯一表示该类,存储于堆中。
(2)执行引擎:执行引擎是JVM的核心部分,负责解析字节码指令,得到执行结果。
(3)内存区:即运行时数据区,存储执行引擎执行时所需要存储的数据。
(4)本地方法接口:调用操作系统本地方法返回结果。
4.简单描述下类加载机制
JVM把class文件加载到内存中,并对数据进行校验、准备、解析和初始化,形成能够被JVM直接使用的java类型的过程。
5.JVM把class文件加载到内存中的方式有哪些?
(1)隐式加载:即通过new的方式实例化对象时,隐式调用类加载器将对应的类加载到JVM中。
(2)显式加载:通过Class.forName的方式加载