最后更新:2020-03-20 14:38:15 手机定位技术交流文章

9原申报
9作者:黄
9转载,请务必在文章开头注明出处和作者
这篇文章的思维导图

您为什么想学习JVM虚拟机
您最近参加过Java面试吗?你有没有发现在Java面试中总是有一种问题,那就是JVM虚拟机。为什么面试者如此喜欢检查JVM问题?这是因为所有的Java程序本质上都运行在JVM上。没有JVM虚拟机,就没有Java语言的执行环境。如果你掌握了JVM虚拟机的相关知识,你只能说你懂Java,否则就像一个只会玩手机的人说他根本不懂Android操作系统
根据百度百科的介绍,JVM是Java虚拟机的缩写。JVM是计算设备的规范。它是一台虚拟的计算机,通过在实际的计算机上模拟各种计算机功能来实现。随着Java语言虚拟机的引入,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机来屏蔽与特定平台相关的信息,因此Java语言编译器只需生成运行在Java虚拟机上的目标代码(字节码),就可以在多个平台上运行而无需修改
是因为JVM的存在,Java能够跨平台运行,一次编译,随处运行。相比之下,像C++这样的语言需要到处编译才能运行,因为它是一种与操作系统紧密相关的语言,并且没有虚拟机的概念。
,当然,由于JVM虚拟机的存在,Java语言的复杂性也大大降低了,代价是运行速度降低了。如果没有JVM虚拟机,谈论Java是没有意义的。学好JVM是学好所有Java技术的前提。
如何学习JVM虚拟机

JVM虚拟机就在我们身边
第一次听说JVM虚拟机,还是在一次面对面的测试中,当时我不知道是什么,后来我买了一本名为JVM圣经《深入了解JVM虚拟机》的书,幸运的是知道JVM虚拟机正在我们的计算机上运行。作为一名Java开发人员,
可能是IDE、JDK和JRE。事实上,JDK包含了JRE,而JRE(Java运行时环境)也包含了JVM虚拟机当我们使用javac或ide编译或执行java程序时,我们实际上是将Java代码变异成类字节码,并将其扔进JVM中执行
此时,在我们的任务管理器中,将有一个称为java的进程,它可以被理解为一个JVM程序,在这个进程中有许多子线程,它们负责代码执行、垃圾收集等
大多数时候,我们不知道什么是JVM虚拟机,自然我们也不能很好地学习它。一旦我们理解了它的本质,以后的事情就不会那么痛苦了。
关于JVM面试问题的初步研究

许多程序员第一次听说JVM可能在面试中,但实际上有许多关于JVM的面试问题。这里有一些常见的采访问题,比如“JVM的堆和栈有什么区别”、“JVM的垃圾收集算法是什么”、“JVM的内存模型是什么”等等。这些问题是相对基本的。像
这样的问题可以通过刷牙来回答。毕竟,面试官不一定比你知道得多,所以有些面试官可能不会深究。然而,对于一些进行了深入技术调查的公司来说,情况不一定如此。许多公司,尤其是电子商务公司,主要基于Java技术栈,对JVM进行了深入的研究。除了阿里和美团,还有京东、伟品、优赞和冰多等公司。
,所以让我们也来看看高级的JVM人脸测试是什么样子的。首先,本主题的高级版本侧重于深度,如JVM的内存模型,这肯定会让您清楚每个区域的功能,并让实际场景询问您,如字符串变量放置在哪里,类元数据放置在哪里,以及局部变量和全局变量分别放置在哪里。如果你对记忆模型只知道一点点,面试官会立刻看穿它。
高级JVM访谈也喜欢考察细节,比如JVM的垃圾收集算法、停止复制、标记删除,需要你把过程解释清楚,把它们的优缺点解释清楚如果这种问题对您来说不是威胁,那么看看其他类型的JVM垃圾收集问题,“年轻一代垃圾收集是如何进行的,请解释详细的过程。”许多面试官可能会简单地谈论年轻一代的收集方法。
你可以简单地回答:“这是通过停止复制来完成的”。事实上,这里面有很多细节。首先,年轻一代被分为伊甸园区和幸存者区。幸存者区域也分为从一个区域到另一个区域。居住在伊甸园区域的物品将从该区域放入。在下一个年轻的gc之后,从一个区域到另一个区域将交换位置,对象将相应地移动。因此,对象的年龄增加一岁。当对象的年龄超过阈值时,对象将进入老年。
能回答这么多看似简单的问题,这也是我在多次面试后的体会。
《JVM圣经》“深入理解JVM虚拟机”

Java书籍数以千万计,但这可能是唯一能真正解释JVM虚拟机的书。互联网上大多数关于JVM的博客基本上都是引用或参考这本书的内容。
那么这本书到底对JVM说了些什么?你为什么不和我一起去把它拆开?在
的第一部分,这本书讲述了Java的历史以及为什么它应该在JVM上运行,这是非常重要的。否则,开发人员会奇怪为什么一种好的编程语言应该在虚拟机上运行。在
的第二部分,本书开始介绍JVM的核心概念,即内存模型,JVM如何管理计算机的内存,以及如何划分这些区域。毕竟,Java中有如此多的类型和变量,以至于很难管理。
的第三部分是本书更难的部分。它开始介绍java代码的操作原理,即Java代码必须编译成字节码才能在JVM上执行,Java代码是由一个接一个的类组成的。因此,本文将介绍JVM虚拟机如何加载这些类。其中有许多新颖的概念,值得探索。
的第四部分,程序编译和代码优化,实际上是相当不受欢迎的,但实际上是非常复杂的。它提到了许多针对程序执行的JVM优化,包括编译时优化和运行时优化。优化的目的是使Java程序更有效地运行。一旦您理解了这部分内容,您肯定会对JVM虚拟机的设计充满敬意。
的第五部分主要介绍了JVM对Java多线程的支持,它自然是基于JVM设计和实现的。其中包括我们常用的锁。这里的主要介绍是同步的,它的本质是互斥锁。然而,随着JVM对重量级锁的同步优化,它也逐渐开始支持轻量级锁和偏置锁。
可以说,这本书是整个过程的精华,基本上是考试的关键,当然考试考试也有一些内容是相对不得人心的,不太受考官的欢迎然而,这本书基本上解释了我们需要在JVM中掌握的所有知识。这本书对于JVM的理论研究已经足够了。
JVM调优实战

完成了理论,最终达到实战部分JVM知识作为一个整体似乎是一个部分的理论知识模块。似乎可以实践的东西很少,但事实上,在JVM中可以实践的东西很多。例如,JVM调优、JVM GC分析和内存分析都是面试官非常喜欢考察的实用能力。在接下来的部分,我们将讨论实际的JVM战斗
在一些高级的Java访谈中,关于JVM的问题可能涉及JVM调优和实践,例如您是否遇到过OOM或内存泄漏,您是如何发现它们的,或者GC太频繁,我们应该如何调查它们总之,这样的问题是基于实践的,被考察的是候选人的实践经验。对于一直都是CRUD的朋友来说,这确实是一个很大的挑战,因为他们还没有接触过服务器。
那么怎么办,其实办法也不是没有,毕竟我有点白没有JVM实践经验,在我回顾这方面之前主要通过几种方法
找到一些众所周知的JVM调优工具,并试用它们,如JDK附带的Jprofile和jmap jstack等将这些工具用于您自己的程序测试,编写几个oom或内存泄漏程序,看看工具中会发生什么。这是一种好的学习方法。
但是有些人会说许多面对面的测试需要有高和/或高负载的场景,并且他们自己的代码在平时没有这种问题。那么如何去做呢?事实上,也有办法做到这一点。事实上,有许多方法可以在互联网上共享这种面对面的测试。考虑到如何调整特定的场景和操作步骤,您实际上可以从其他人的文章中找到一些答案。这样,即使你平时没有这种练习,你也可以通过学习JVM调优实战文章来复习它们。事实上,事实是一样的。
本文由 在线网速测试 整理编辑,转载请注明出处。