JVM虚拟机基础篇(上)
一.初识JVMJVM就是加载并运行字节码的一个程序。1.功能1解释和运行源代码被javac编译成字节码文件JVM将字节码文件中的字节码指令实时解释成机器码交给计算机运行。2内存管理1.会自动的为对象方法分配内存2.自动的垃圾回收机制回收不再使用的对象3即时编译java之所以能跨平台运行编译一次到处运行是通过java虚拟机实现的。在不同系统中安装不同的java虚拟机java虚拟机将字节码转换为机器码交给不同系统的cpu运行。但是这种转换牺牲了效率。c和c他们将源代码直接编译成了机器码文件交给cpu运行效率大大提高。当然这也导致了其不具有跨平台的特性。在java程序中有的代码反复调用所以有些字节码指令就会反复的被解释成机器码。所以小笼包较低。java的即时编译器就优化了这种问题。如果在运行过程一段代码被虚拟机发现为是热点代码及时编译器就会将这段代码对应的字节码文件优化并将优化后的机器码存入内存中当这段代码第二次被调用时直接从内存中取出即可大大提高了java程序运行的效率。4注意JVM虚拟机编译的是字节码文件所以JVM虚拟机不仅仅可以运行JAVA代码2.JVM虚拟机的组成JDKjavac编译器JREJREjava虚拟机java核心类库JVM虚拟机有以下组件类加载器运行时数据区执行引擎解释器垃圾回收器即时编译器本地接口类加载器负责将字节码文件加载到本地内存中然后运行时数据区负责管理内存进行方法和对象的内存分配然后执行引擎负责通过解释器将字节码指令转换为机器码通过垃圾回收器负责自动垃圾回收通过即时编译器进行机器码缓存最后通过本地接口调用编译好的本地方法。像hotspot等虚拟机都是通过c和c实现的而java只能调用JVM暴漏出来的接口像底层代码没有暴漏出来并且c和c是编译性语言需要编译后才能运行。JVM并不能编译c和c所以通过本地接口调用编译好的本地方法