JVM简介
JDK,JRE,JVM三者间的关系?
众所周知,jdk软件开发工具包,jre java类库,jvm java虚拟机,废话不多说,详细结构图如下:
深入学习JVM可以解决哪些问题?
1)有效防止内存泄漏,内存溢出
2)优化线程锁的使用
3)科学进行垃圾回收
4)提高系统吞吐量
5)降低延迟,提高性能
JVM的工作方式
在主流的jvm中,将字节码文件翻译成机器码提供解释执行和编译执行两种方式
1)热点代码: 频繁使用的方法
2)解释执行器: 逐条将字节码翻译成机器码执行
3)编译执行器: 即时编译(JIT),使用热点代码执行
如何理解JIT?
JIT(即时编译)用来提高java程序运行效率的一种技术,可以将字节码编译成相关的原生机器码,进行各个层次的优化,并将这些机器码缓存起来,以备下次使用
JVM中解释执行与编译执行并存
解释器和编译器两者各有优势,当程序需要启动和执行时,解释器可以首先发挥作用,省去编译的时间,立即执行。程序运行后,随着时间的推移,即时编译发挥作用,对反复执行的热点代码以方法为单位即时编译,可以获取更高的执行效率。但是如果JIT对每条字节码都进行编译,缓存,会增加开销,只存一部分常用的字节码,不可能做到把全部的字节码都缓存,所以,可以使用解释器执行节省内存,使用编译执行提高效率。
JVM的运行模式
JVM有两种运行模式,Server和Client,两种模式的区别在于,Client模式启动速度比较快,Server启动较慢,但是启动进入稳定期后,Server的运行速度要比Client快。这是因为Server模式采用的重量级虚拟机,对程序做了很多优化,而Client模式采用轻量级虚拟机,所以Server启动慢,但是稳定后速度要比Client快的多。
可以在终端使用java -version查看JVM的运行模式
JVM体系结构
JVM内存结构是怎样的?
JVM启动运行字节码文件会对JVM内存进行划分,可分为线程共享区和线程独享区。