jvm是什么?
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。
jvm的生命周期:
起点:任意有main()方法的类都可以作为起点。
终点:非守护线程全部退出/System.exit()。
jvm的结构中的字节码指令集(方法区)和堆为jvm所有,其它pc寄存器,java栈,本地方法区为线程所有。
如何加载一个类?分三步:
1. 装载,查找并装载二进制数据
2. 连接,执行验证(输入数据正确)、准备(分配内存、初始化默认值)及解析(符号引用变为直接引用)
3. 初始化,(变量初始化为正确的值)
虚拟机分类:进程虚拟机jvm,系统虚拟机vmware
jvm不包括操作系统,易于跨平台;vmware包括操作系统,容易模拟多台机器。
java中的方法:java方法,本地方法JNI。
jvm的任务:由classloader(2种)加载class文件到虚拟机方法区,靠执行引擎(3种)执行。
classLoader:启动类装载器bootstrap,用户自定义类装载器。封装了如何取class文件。当被装载类A引用另一个类时B,虚拟机就会使用第一个类A的classLoader来加载B类,被装载的类默认情况下只能见到同一个装载器装载的类。
jvm通过不同的类装载器来区分装载的命名空间。