为什么要学习Java虚拟机?

像很多人一样,我第一次接触Java虚拟机只是因为它需要面试,所以我不得不认真地看一看。很多人回答了为什么他们要学习虚拟机的问题:因为面试。但经过多年的学习和实践,我发现学习虚拟机不仅仅是关于面试,而且是对Java语言的深入理解,并为未来的在线问题奠定基础。

首先,让我来谈谈我的第一点:学习Java虚拟机对Java语言的深入理解。对于刚工作了一两年的朋友来说,每个API都不熟悉,自然不会深入到Java的细节中去。但是对于已经工作了三年的朋友来说,很多时候你必须深入字节码级别来解决问题,然后才能得到准确的结论,字节码是虚拟机的一部分。

例如,我们经常使用布尔值,我们都知道它有两个值,真值和假值。但您知道,在运行时,没有布尔类型的Java虚拟机。布尔是由虚拟机中的整数1和0表示的。

例如,我们都知道类路径和类名只确定一个类,但情况并非如此。换句话说,我们刚刚得出的结论是肤浅的。如果深入虚拟机级别,类加载器、类路径和类名称是唯一确定类的类。也就是说,如果两个不同的类加载器加载同一个类文件,则由两个类加载器加载的类是不同的。

有很多这样的例子。学习Java到这个程度,如果你不了解一些虚拟机的基本知识,那么你将很难理解一些细节。

然后我想谈谈我的第二点:学习虚拟机是为解决在线问题奠定基础。我们知道我们的一个Java应用程序部署在一个在线机器上,而且必须时不时地出现问题。尽管存在网络和系统问题,Java应用程序经常遭受Java虚拟机中的内存问题。内存溢出或GC经常导致响应速度慢等。

如何解决这些问题?首先,你必须学会阅读日志。然后,你必须了解GC日志,这是Java虚拟机内容的一部分。如果您了解GC日志,那么您必须了解什么是年轻一代、老一代、永久一代、元数据区域等等。这些是Java虚拟机的内存模型。如果您了解Java虚拟机的内存模型,您将知道Java虚拟机如何进行垃圾收集,它们使用的垃圾收集算法,以及它们的优点和缺点。其次是各种垃圾收集器的特点。

你看,所有这些都是相关的。如果要解决Java应用程序崩溃的问题,必须学习GC日志。要理解GC日志,必须学习Java虚拟机内存模型。要了解Java虚拟机内存模型,需要了解垃圾回收机制等。

说到为什么我要学习虚拟机,我想谈谈我为什么要写这个专栏。

也许在其他人眼中,虚拟机市场上的数据已经非常丰富。对于理论类型,我们可以看到周志明教授对Java虚拟机的深刻理解。对于实战类型,我们可以看到葛艺明老师的“实际Java虚拟机”。我似乎没有任何理由再写同样的东西,而且在写作上会有很多重叠。起初我是这么想的,但后来我发现我对一些知识点有自己的理解,希望和大家分享。虽然不可避免地会有一些重叠,但写作思路不同,对于不同的群体,意义自然会有所不同。

与对Java虚拟机和实际Java虚拟机的深入理解相比,我应该写得更清楚,更容易理解。本专栏将以逻辑方式编写,即,从源代码、字节码、机器代码、加载到内存、垃圾收集的角度,讨论其中涉及的所有知识。这种方法相对更为合理,可以将所有知识点串联起来。希望所有的知识点都能够以逻辑的方式结构化,这样每个人都能更好地理解,这样初学者不仅能够知道这件事,而且知道为什么这样做。

在决定要做什么之后,我两个月前开始准备,每天早上6点起床阅读相关书籍,并开始写初稿。但是写一个简单的专栏并不容易。有时它太苛刻,但很容易使文章难以产生和死亡。在我写这篇文章时,我大致整理了要写的章节,但是内容仍然不是很清楚。但我知道,如果我不把它再次发送出去,也许我就不会再发送出去了。因为写的时间太长,完成它可能太晚了。有时过分追求完美不是好事。所以,当你阅读时,欢迎你提出更多的评论来帮助我改进文章。

如果你对我说的话感兴趣,你可以关注我的后续文章。如果你有对Java虚拟机感兴趣的朋友,你也可以转发他们并邀请他们一起学习。

猜你喜欢

转载自blog.csdn.net/qq_41701956/article/details/84946450