java虚拟机概述

      想了好久,还是决定写一个jvm的一个系列,学习java基础,我感觉必须要动要动一下jvm,不然不会知道去排查问题和优化代码,这篇文章大概就是写一个jvm的一个总体的概述。后续会写具体详细的章节来介绍jvm,因为最近自己也在学习jvm,希望与大家共同学习。

一、JVM概述

  JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。(直接从百度百科拿了个概念),这里有兴趣的可以去了解下JVM,VMware,docker这些的区别,每个将的层次概念不一样。

  话不多说,直接上图(用亿图软件画的,还比较好用,有兴趣的小伙伴可以试试):

 

   从图上看,个人觉得jvm分为前端编译(javac)生成class文件类加载系统,以及运行时数据区执行引擎,后期大概会根据这个顺序进行学习,class文件大概知道其构成,以及其通过javac编译的过程,类加载的话这个挺重要的,我们可以知道一个字节码文件中的一些内容的检验,初始化等。运行时数据区(这里要区分java内存模型),大致可以分为共享区和线程私有区域,共享区域主要是堆和方法区(这里是java7的jvm,在java8中的方法区的实现是元数据区域(metaspace)其实这个元数据区域不在java虚拟机内存结构里面,而是在本地内存中),线程私有的话主要有程序计数器,本地方法栈和虚拟机栈,在数据运行时区域中的堆中主要还会有对GC算法以及收集器的一个讲述。执行引擎的话包括解释运行和即时编译(JIT),后面还会说一些java工具,比如jps,jstack,jinfo,jstat,jmap等工具的使用,如何去分析。大体的JVM的一个学习路径就是如上图所示。后来我又去画了一个比较详细的图:

纯属个人学习画图,如果哪里有误,麻烦各位指正,不是做UI的感觉画的还是不够协调。后期会详细说:

1、class文件

2、类加载

3、运行时数据区(内存结构)

4、java自带的一些工具

5、GC算法和收集器

6、编译器

7、java内存模型

有兴趣的小伙伴可以一起学习jvm

 

posted @ 2020-03-20 17:08  一寸HUI  阅读(521)  评论(0编辑  收藏  举报