不管你有没有学习过JVM,但总有一瞬间会让你想要学习它。
因为一次难忘的面试经历,让我想要学习好它。
那是三年前的一个下午,我在深圳北附近的一家公司面试JAVA中级开发工程师。
在一间办公室里,我对面坐着两个面试官。
他们俩轮流向我提问,我都对答如流,当我都觉得这次面试稳了的时候。
其中一个面试官缓缓的说道:“了解JVM运行时数据区的内存吗?分为哪几块?”。
我自信的回答:“分为程序计数器、本地方法栈、虚拟机栈、方法区和堆,其中程序计数器、本地方法栈、虚拟机栈是线程私有,方法区和堆是线程共享”。
他又问道:“堆还可以再细分一点吗?”。
我接着回答:“堆还可以细分为:新生代和老年代,新生代再细致一点可以分为Eden空间、Survivor空间等”。
另一个面试官也问道:“为什么要将堆分代?”。
我支支吾吾的说:“不太清楚。。。”。
当时的我从没有思考过这个问题,只知道书上说要分代,也没想过为什么。
后来他们又问了垃圾回收算法、垃圾回收器和类加载机制方面的问题,我回答的不是很好。
面试完后他们说先商量一下,有结果hr会通知我,结果就是没有通知。
因为面试失败,这是我最开始想要学习JVM的原因,那你为什么要学习JVM?
这是一个与自身利益相关的问题,因为在面试中会问到JVM。
学习JVM能有更好的工作机会,可以拿更高的工资。
在面试中问到JVM的概率很大,面试中级和高级开发工程师,几乎会问到JVM,还有些面试初级开发工程师也会问到JVM。
当面试问到了,如果你回答不出,你可能会错失这次机会。
如果你回答出来了,那你就比别人更有机会被录用。
有意思的是,当你越害怕别人问你一个知识点的时候,别人会越发问你这个知识点。
了解虚拟机如何执行代码,才能写出更好的代码,提升技术能力。
了解了JVM的原理才知道JAVA的运行原理,我们知道线程同步可以用synchronized和Reentrantlock,那我们在写代码的时候到底用哪个?
很多人都说synchronized是重量级锁,Reentrantlock是轻量级锁,而且比synchronized要灵活。
但是synchronized底层原理后,你会知道虚拟机会对它进行优化,涉及到锁升级,从无锁、偏向锁、自旋锁、最后才向操作系统申请重量级锁。
java程序运行在虚拟机上,一旦出现与虚拟机相关的问题,如果不了解它,那么很难排查出问题。
当你的Java应用程序每隔一段时间响应很慢,或者没有响应,可能是在进行垃圾回收。
垃圾回收会过程会使应用程序产生停顿,停顿产生时整个应用程序线程都会被暂停。
没有任何响应, 有点像卡死的感觉,这个停顿称为STW。
这时需要配置JVM参数,通过分析的手段定位问题,然后调优。
如果你是一个初级JAVA开发工程师,可能你暂目前还不用接触JVM相关知识。
你现在只要学好JAVA语法,熟悉各种API就行,但在你的职业道路上你一定会接触到它的。
如果你是一个中级或高级开发工程师,那你或多或少的接触过JVM相关知识。
只有你了解了JAVA虚拟机执行代码的原理,才能写出更好的代码。
作者因面试中JVM相关问题回答不佳而失败,从而开启JVM学习。面试中常涉及JVM知识,掌握它能获更好工作机会。了解JVM原理可助写出好代码、排查虚拟机问题,初级开发者未来也会接触,中高级开发者应深入了解。
9081

被折叠的 条评论
为什么被折叠?



