当前位置:科技动态 > 学Java虚拟机有没有用?听听相关人士怎么说!

学Java虚拟机有没有用?听听相关人士怎么说!

  • 发布:2023-10-05 13:35

如果你想一直活在软件开发的表面,那绝对没有问题。如果你想像 Neo 一样清晰、清晰、真实地看世界,就需要修炼内心的力量,做到 Java 程序员,了解 Java 虚拟机是扎马布的基本功。 我就是大名鼎鼎的Java虚拟机。据说这个星球上每天有超过900万程序员与我互动。这实在是一个惊人的数字。超过900万的人中有很多人对我的技术内幕知识非常感兴趣。无论如何,他们都会“把我切成碎片”,以了解更多信息。有些人甚至开始查看我的出生地——源代码——以至于他们甚至没有任何隐私。 当然,也有很多人忽视了我的运行机制。原因很简单:Java虚拟机相关的事情只有面试的时候才会问到。只要背下那些垃圾回收算法,你就能应付了! 事实真的如此吗?面试官为什么喜欢问JVM原理?他们没有什么可问的吗?还是只是为了展示自己的优秀?为了比别人优秀?来打压你? 我不这么认为。请关注我的名字:Java虚拟机。我是虚拟机! 虽然不像VMWa热那样,VirtualBox可以完全虚拟化一台包括内存、硬盘、CPU在内的硬件计算机。至少我是软CPU,有自己的指令集,有自己独特的可执行文件格式,有自己独特的基于堆栈而不是基于寄存器的执行,还有久经考验的垃圾回收机制…… 作为一个口口声声说自己热爱编程、立志要写出伟大的软件来改变世界的程序员,孩子,这么有趣的事情你怎么能视而不见呢? 对软件技术的好奇心是你最终成为伟大程序员的第一动力。如果你不愿意深入研究技术,了解其背后的原理,如果你不愿意像顽皮的顽童一样把一个玩具变成一个软件。零件,然后将它们重新组合在一起(好吧,从来没有真正将它们重新组合在一起),我真的怀疑你能在这个行业呆多久或多远。 我刚才提到了有趣,这真的有用吗? 从表面上看,它是没有用的,至少在短期内是这样。你编写程序,运行程序,然后吃饭和睡觉。 不管什么基于栈的虚拟机、方法区、堆、垃圾回收,生活很美好,世界很大。我想去看看。别用这些烦人的事情来烦我。如果你想一直活在软件开发的表面,那绝对没有问题。如果你想像尼奥一样清晰、清晰、真实地看这个世界,就需要修炼自己的内在力量。作为一名Java程序员,了解Java虚拟机是扎马布的基本功。 例如,如果你了解了Class文件格式,你就能了解ASM是如何“硬”地在运行时动态生成字节码的,然后你就会知道CGLib是如何改进它并使其更易于使用的。 CGLib是Spring AOP赖以生存的主要基础。一路走来,你对AOP有没有更深入的了解呢? 你甚至可以在脑海中想象字节码是如何动态创建、被Classloader加载、形成新的Class,然后拦截你的业务类的。 不要因为看透了这个世界而太高兴。如果你非要说我能用Spring的AOP,那我也没办法。每个人都有自己的野心。 扩展一下,我家里现在有很多动态语言,比如Jython、JRuby、Clojure、Scala等,它们都需要动态生成字节码来运行(码农注:Scala也可以直接编译成class文件),你可以看到理解Class文件格式的好处。 还有,了解了一些重要的字节码指令后,你就会知道什么叫面向对象,尤其是你写的那些漂亮的OO代码。就我而言,它们已经“退化”为函数调用。我不知道。你会不会灰心丧气,但是没办法,我们计算机的本质就是这样的,顺序,循环,分支,函数调用。作为补偿,我将让您了解多态性的秘密,它是许多面向对象语言的基础。 说到函数调用,就是你编写的Java程序运行时形成的栈帧。这确实是一个超级重要的概念,不仅对我来说,而且对于运行本地代码时的物理CPU和内存也是如此。虽然我和他们的结构不同,但是它们都服务于同一个目的:表达函数在运行时的结构。 了解了这个家伙之后,你就会知道函数在机器层面是如何调用的,参数是如何传递的,什么是递归,什么是尾递归(我不支持!)。也许你会去看看汇编和缓冲区溢出攻击。各个知识点就会开始连接起来,形成一个大网络。这种感觉非常清爽。 这样的例子我还可以举出很多,但估计很多人已经不耐烦了,我就到此为止了。你们人类说计算机是一门科学,但是科学的要素在哪里呢?在我看来,它更像是工程或技术。核心基本概念确实不多。如果你花一些努力来掌握它们,它将让你终生受益。 前几天偷偷看了你的小说《天龙八部》。里面的扫地僧真是太神奇了。轻松收服了慕容博和萧远山两位顶尖高手。他很诚实。这是什么意思?问题?内功的修炼确实很重要。 【本文为51CTO专栏作家“刘鑫”原创稿件。转载请通过作者微信公众号编码获得授权】 点击此处查看该作者更多好文章

相关文章