绪言
Jvm(Java虚拟机)是Java领域的一个至关重要的东西,也是个非常难的东西。大家都知道所有开发都是在这个基础下运行的。我们平时的开发很少用到这个东西,但是作为一个java开发者如果想走的更远,还是要花时间去看下jvm了解他的底层原理。
在这里讲一下我的学习方式,我这边看了两本书籍一本是由james Gosling,java之父编写的《java性能优化指南》还有一半是由周志明先生写的《深入理解java虚拟机》在结合张龙先生的视频教程一起服用。所以本篇文章其实更多的是自己的一些观后感,跟读后感。所以我说这是一篇学习笔记
java发展至今出现过很多java虚拟机,但是对于大多数开发者来说,用的都是sun公司的HotSpot Jvm,所以本篇文章都是说的是HOtSpot JVM
本博所有内容都在个人博客橙寂博客中,对jvm解析有错误欢迎大家指出
JVM概述
这里面随便拿一个东西都可以写一篇文章。所以在本文中只是对它做了个基础介绍。我接下来会针对每一项。以单独博文的方式做个补充.
VM生命周期
HotSpot的运行时系统负责启动和停止HotSpot VM。当一个java程序或者是main方法执行。jvm便开始运行了。期间如果遇到了异常,或者主动调用了系统的System.exit()方法那么vm便会被清理。
简单来说程序要结束。
1.程序有异常,或者发生了错误
2.系统调用了System.exit()方法
VM的架构
HotSpot VM的功能非常强大,满足高性能和高扩展性。他能做到这么高功能主要依靠三大组件
Jvm的三大组件:Vm运行时(Runtime),JIt编辑器(JIT Compiler)以及内存管理器(Memory Manager)
以下为jvm架构图。
JIt编辑器(client和server)和垃圾收集器(G1,CMS,Serial)都是可拔插的。运行时系统为这两大组件提供了服务跟api。所以下文我要介绍一下运行时系统。
Runtime运行时系统
在JVM的这三大组件最受关注的就是JI编辑器 与Gc(垃圾收集器)。虽然这两个组件非常重要但是java的运行时环境也是不可以被忽视的。
java运行时在jvm中担任着很多职责,包括命令行解析,Vm生命周期管理,类加载,字节码解析,异常处理,同步,线程管理,java本地接口,Vm致命错误和C++(非java堆管理)。