初 揭 JVM 神 秘 面 纱

Posted 益达学长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初 揭 JVM 神 秘 面 纱相关的知识,希望对你有一定的参考价值。


⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇ 我就是要⠀⡏⠀⠀⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇ 白嫖⠀⠀⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽⠀

随着java7的正式发布,java虚拟机的设计者们通过JSR-292规范基本实现在java虚拟机平台上运行非java语言编写的程序。java是跨平台的语言,jvm是跨语言的平台。java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,它只关心“字节码”文件,字节码文件也可以看作jvm字节码,凡是满足jvm相关规范的字节码文件,均可以在jvm上运行。字节码的文件开头必须为CA FE BA BE!jvm是运行在操作系统之上,与硬件并没有直接交互。

特点

1)一次编译,到处运行

2)自动内存管理

3)自动垃圾回收功能

jvm架构模型

java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种基于寄存器的指令集架构。由于跨平台的设计,不同的CPU架构不同,即没办法规定相应的寄存器,所以java 的指令都是根据栈来设计的。相比基于寄存器,所需要设计的代码更多。

JVM的生命周期

启动:java虚拟机的启动是通过引导加载器创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。

执行:程序开始的时候执行,程序结束就停止。执行一个所谓的java程序的时候,真真正正执行的是一个叫做java虚拟机的进程。

退出:

1)程序正常执行结束

2)程序在执行过程中遇到了异常或错误而异常终止

3)由于操作系统出现错误而导致java虚拟机进程终止

4)某线程调用runtime类胡总和system的exit方法,或者runtime的halt方法,并且java安全管理器也允许这次exit和halt操作。

5)除此之外,JNI(java native interface)规范描述了用JNI Invocation API 来加载或卸载Java虚拟机时,java虚拟机的退出情况。

主要虚拟机了解

第一款虚拟机:Sun Classic VM在1996年java1.0版本的时候发布,内部只提供解释器,如果使用JIT编辑器,就需要进行外挂,但是二者并不能配合工作。现在hotpost内置了此虚拟机。

三大虚拟机:

1)SUN公司的Hotpost VM。占据据对的市场地位,从JDK1.3开始,HotSpot成为默认虚拟机。

2)BEA的JRockit。专注于服务器端应用,因此JRockit内部不包含解析器实现,全部代码都靠编辑器编译后执行。号称世界上最快的JVM。

3)IBM的J9。也号称世界上最快的虚拟机。

以上是关于初 揭 JVM 神 秘 面 纱的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅的学习JVM,揭开篇(一

如何优雅的学习JVM,揭开篇(一

JVM内存初理解

JVM初体验

JVM成神之路--类加载机制以及类加载器

堪称神作,啃透这份JVM笔记,轻松搞定阿里30K面试