JVM系列-总览
Posted 朱朱有话和你说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM系列-总览相关的知识,希望对你有一定的参考价值。
选题原因
现在流行的框架越来越多,封装的也越来越完善,各种框架可以搞定一切,我们几乎不用去关注底层的实现,但是使用多了之后,就觉得单纯的去使用一个框架,而不去思考背后的原理这种做法对自己的成长十分不利。每次拿到一个框架,总是要花很长时间才能搞懂这东西是怎么玩起来的,反思了一下,还是因为自己的知识储备不够,才使得上手一个新东西会这么吃力,所以就开始着手研究了一些框架的源码。
之前研究了一些框架的源码之后,发现往往最终很多地方都会指向JVM底层的内容,有的是使用到了JVM的技术实现一些功能,有的是使用了JVM当中的一些思想,从那个时候便开始对JVM有了兴趣。之后的面试中也确实验证了我的猜想,好几个公司的面试过程中都考察到了JVM中的知识,比如JVM的内存分布,JVM中的垃圾回收算法,JVM调优等等。便越发觉得JVM是一个很重要的东西,很值得花时间去好好研究一番。
虽然JVM短期来看对使用价值不大,但是我认为长远的来看,了解JVM是一件非常有必要的事情,有了JVM的基础的话,对以后很多框架底层源码实现原理的理解或者是自己去写一套框架都会有很大的帮助,很有利于自己未来的成长。所以我在自己有限的学习笔记之中,整理出一个JVM系列来分享给大家参考。
JDK、JRE、JVM
说到JVM,不得不提的就是刚刚接触java时候老碰到的JDK和JRE,那个时候总是不能理解这三个东西到底是个啥,它们之间有啥联系。
总的来说JDK是给开发人员使用的,JRE和JVM是给普通使用用户来使用的。
它们是啥?
JDK(Java Development Kit)是Java程序员常用的开发包,目的就是用来编译和调试Java程序的。
JRE(Java Runtime Environment)是指Java运行环境,也就是通过它,我们才能将我们的写好的程序发布到用户手中,让用户使用。
JVM(Java Virtual Machine)是Java虚拟机的缩写,是指负责将字节码(.class文件)解释成为特定的机器码进行运行。
它们之间有啥联系呢?
JDK中包含JRE,在JDK的安装目录中有一个名为jre的文件夹,这个文件夹里面有两个文件夹,分别是bin和lib,在这里可以认为bin中的东西就是JVM,而lib是jvm工作所需要的类库,而jvm和lib合并起来就称为JRE。
简单来说就是jdk包含了jre,而jre又包含了jvm,所以它们的关系大概可以用下面的图来总结:
JVM概述
JVM是java的核心与基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的,可以在上面执行java的字节码程序(即.class文件)。java编译器只要面向JVM,生成JVM可以理解的字节码文件,即可实现一次编译,到处运行。
JVM会将每一条指令翻译成不同平台的机器码,然后通过特定平台运行。由此可见JVM是Java平台架构的基础,Java的跨平台性质正是通过在JVM中运行Java程序实现的。虽然Java是跨平台的,但是JVM是不跨平台的,也就是说不同操作系统上的JVM是不同的。
要了解java,就必须先了解一下java的语言执行过程,什么是语言执行过程呢?所谓的语言执行过程就是从源代码到机器代码的执行过程。
Java语言执行过程是这样的:
开发人员开发源码(也就是我们平常写的.java文件)
JVM源码级编译器将源码编译为字节码(.class文件)
字节码被装入虚拟机由虚拟机中的解释器解释成为机器代码执行
所以,总结来说,java程序运行的整个过程大概是这样的:
总体梳理
JVM方面的内容大概可以分为这几方面去学习:
Java源码编译加载与运行
编译机制
类加载器、类加载机制、双亲委派模型
运行机制
垃圾回收
对象可达性算法
GC算法
垃圾收集器
对象创建过程
对象访问定位
类文件结构
JVM的内存结构
内存结构组成
内存分布策略
JVM调优
以后的系列当中会针对上面提到的方面一一总结。
总之先挖坑啦~以后慢慢填坑。
加油冲冲冲!
参考博客
搞清楚JDK、JRE、JVM的区别
JVM知识点(全,一篇搞定)
关于Jvm知识看这一篇就够了
Java虚拟机(JVM)面试题(2020最新版)
以上是关于JVM系列-总览的主要内容,如果未能解决你的问题,请参考以下文章