节:如何看待Java上层技术与JVM?

Posted 李阿昀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节:如何看待Java上层技术与JVM?相关的知识,希望对你有一定的参考价值。

「JVM与Java体系架构」章节的整体目录

从现在开始我们就要正式步入第一章——JVM和Java体系结构的学习中了,首先我们看一下这一章要讲授的主要内容都有哪些。

  1. 前言
  2. 面向人群及参考书目
  3. Java及JVM简介
  4. Java发展的重大事件
  5. 虚拟机与Java虚拟机
  6. JVM的整体结构
  7. Java代码执行流程
  8. JVM的架构模型
  9. JVM的生命周期
  10. JVM的发展历程

从上面可以看到,这一章节的内容分量还是比较充足的,而且也比较详细,因为我一共罗列出来了10个点,下面我会挑选几个点来做一下简要说明。

首先,来看一下第四点,即Java发展的重大事件,相信正在看我这套JVM系列教程的童鞋,大部分都已经在做Java开发了,关于Java发展的重大事件,肯定是有所耳闻,只是可能记不得其中一些重大事件了,记不得也没关系啊,因为后续我就会给大家讲解到,只是我主要是侧重于JVM的一些变化来讲的,这其中当然还包括垃圾回收器了,乃至于Oracle公司(或者Sun公司,Oralce已经收购Sun了)一直到发布JDK 17这一整个过程当中的一些重大事件,我也会给大家一一介绍到。

然后,再来看一下第六点,即JVM的整体结构,看过上一讲的童鞋,应该都知道我们可以整个把JVM分成三层吧!而且,这三层将贯穿于大家学习内存与垃圾回收这一篇章的整个过程当中。

接着,再来看一下第七点,即Java代码执行流程,相信大家应该对其并不陌生,大家回想一下,你平时是不是这样做的,就是要么写完Java程序以后,直接部署到服务器中,然后通过前端的请求去访问,要么写一个普通的Java程序,直接点击右键运行(即Run as Java Application)。

那么,在这一整个过程当中,你有没有思考过这样一个问题,就是Java程序代码是如何从源文件到字节码文件的,中间经历过什么,又或者从字节码文件到解释运行,中间又经历过什么,我相信绝大部分Java程序员对此是不太了解的,如果你没有学习过JVM的话。当然,不排除有科班出身的童鞋知道啊,因为他们本身以前就学过C语言等高级语言,甚至汇编语言也学过,所以他们应该是清楚其中大部分过程的,毕竟语言很多都是类似的!

总之,如果你要是清楚其中的过程的话,那么就当作是复习就可以了,如果要是一点都不清楚,或者印象比较模糊,那么就得好好学了,也即彻底搞懂Java代码执行流程。

紧接着,再来看一下第八点,即JVM的架构模型,典型的虚拟机的架构模型可以分为两种,一种是基于栈的架构模型,即指令级的架构,一种是基于寄存器的架构模型,JVM在这里选择了使用基于栈的架构模型。

看到这里,难道大家心里就没有一点疑惑吗?反正我是有的,我的疑惑是基于栈的架构模型与基于寄存器的架构模型它俩之间有什么区别,以及它俩各自的优缺点又是什么。如果大家想知道问题的答案的话,那么就请拭目以待吧!

再接着,来看一下第九点,即JVM的生命周期,这是一个非常基本的问题,因为凡是内存层面的东西都是有其生命周期的,当然,不止内存层面,我们说的更宽泛一点,物理层面的东西也是有其生命周期的,比如一个可看得见摸得着的内存,它的生命周期就是从它出生开始,也就是被制造出来,一直到其死亡,死亡就是你把它给弄坏了,它自然就死亡了。如果你要是小心一点的话,那么它的生命周期可能还会再长一些。

那么,在内存层面,JVM是什么时候出生的,然后执行又是什么时候开始的,哪些情况会导致它的死亡,这都是我们要考虑的问题,因为这就是JVM一个完整的生命周期。

最后,来看一下第十点,即JVM的发展历程,既然这一点的主题是JVM的发展历程,那么我们必然会讨论到这些问题,即在JVM的整个迭代过程当中第一个JVM是什么、目前主流用的是什么JVM,以及未来还有哪些JVM正在发展的过程当中。

以上就是第一章——JVM和Java体系结构的一个整体目录,也即这一章要讲授的主要内容,这里我仅仅只是稍微简单说明了一下,后续我会针对每一个点进行详细扩展,大家就请拭目以待吧!

接下来,我就要针对前言这一点来给大家进行详细讲解了。

前言

很多的Java程序员在学习JVM的时候,除了看书之外,好像就只能从网上搜相关博客来看了,但是这些博客一来是准确率比较差,有些博客在讲解JVM这方面上真是一言难尽,讲的错不说,很多就是信口开河,乱说一通;二来是没有形成一个完整的体系。正是基于此,我必须借助这套JVM系列教程改变这一现象,以正视听!套用了一个比较流行的网络语,就是今天,他来了!

好像这么说,似乎这套JVM系列教程就很经典似的,不一定啊,因为经典是需要经过时间的迭代洗刷以后才能够凸显出来的。我只能这样说,就是这套JVM系列教程会尽可能地给大家展现JVM的全貌,同时,我会尽量使用更通俗易懂一些的语言来为大家进行讲解,不让大家觉得太枯燥乏味。

你是否也遇到过这些问题?

首先,我们来看这样一个问题,就是作为Java工程师的你是不是曾被JVM伤害过?有的童鞋说有,有的童鞋说没有,说没有的童鞋,我是应该恭喜你呢,还是应该替你感觉到惋惜呢?我想应该都有啊。

然后,我们来具体看一下大家在实际开发当中是不是遇到过如下这几个问题。

  • 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM(即Out Of Memory,内存溢出),而且还不清楚是什么原因造成的。
  • 想解决线上JVM GC问题,也即垃圾回收器问题,但却无从下手。为什么无从下手呢?因为不知道怎么去看那些日志。
  • 新项目上线,对各种JVM参数设置一脸茫然,既然一脸茫然,那干脆就直接默认吧,结果却JJ了。或者,压根就不知道该如何进行JVM参数的调优。
  • 每次面试之前都需要重新背一遍JVM的一些原理概念性的东西,然后面试官却经常问你在实际项目中如何进行JVM参数的调优,如何解决GC、OOM等问题,结果你却一脸懵逼。

以上是关于节:如何看待Java上层技术与JVM?的主要内容,如果未能解决你的问题,请参考以下文章

节:Java及JVM历史上的重大事件

节:Java及JVM历史上的重大事件

节:Java及JVM历史上的重大事件

JVM专题-JVM与Java体系结构

JVM从入门到精通01

为什么java不是最强的语言而JVM确可以叫做最强的虚拟机呢?