《JVM修仙之路》初入JVM世界
博主目前正在学习JVM的相关知识,想以一种不同的方式记录下,娱乐一下
清晨,你睁开双眼,看到刺眼的阳光,你第一反应就是完了完了,又要迟到了。刚准备起床穿衣的你突然意识到不对,这好像不是我家呀。。。。。这是哪呀
你的名字是小王,是21世纪的一个普通程序员,过着996的生活。只是今天一睁眼,你发现你好像是穿越了。正在你迷迷瞪瞪的时候,一个和你年龄相近的小姐姐快速走进来,迅速拉起你的手,嘴里在嘟囔着,快走,再晚就赶不上J1大佬的表演了。
你心里更懵逼了,嘛是J1,还没等你问出这个问题,你们就已经到了表演现场。
台上表演的人时而吐出火焰,时而生成玄冰,台下传来阵阵的欢呼。这时的你更加笃定了穿越的想法。你转头问向小美,台上这些人是怎么做到的。小美苦笑一声,随后应道我也不清楚,这也是我第一次见到这些大佬现场表演。这时一位白发苍苍的老人开口道,这是因为他们的JVM中的内力足够深厚。
听到JVM这三字母的时候,你一下子懵逼了,心里想,嘛玩意,穿个越还离不开这东西,回忆着穿越前学这玩意学的恶心,面试完全还回去了。你转头看向老人,只见老人虽已两鬓斑白,但仍站得笔直,眼神中透漏着一股坚毅,一袭白衫,给人一种世外高人的感觉。你接着问,那我们普通人可以像他们这样吗?老人点点头道,可以是可以,不过要受常人所不能承受之苦。老人接着说,普通人因为内力太少,只可支撑一个本地方法栈,(java语言实现的方法有局限,对于一些底层的功能需要借助与C或C++实现的方法来实现,这些方法就称为本地方法,而为其方法运行时提供内存空间的部件就称为本地方法栈)只能支撑我们的日常生活。而台上这些J2的人已经将内力提升到更高层次的境界,从而可以生成火焰和玄冰。其主要原因就是他们JVM中拥有了虚拟机栈和程序计数器。
为了证实心中的想法,你再次问向老人,这俩是什么?你疑惑的看向老人。老人缓缓答道,虚拟机栈就是存储供这些技能消耗的内力的容器,并且会为每一个正在释放的技能单独分配一部分内力,其他技能就算内力释放完了,就不能侵占该技能的内力,这样将不同技能需要的内力分割出来可以避免走火入魔(内力就是内存,一个技能就是一个线程,正在释放的技能就是正在运行的方法,走火入魔就是线程不安全),并且技能释放完毕之后,该技能占用的内力可以在一段时间内返回。
你听完之后,进一步证实心中的想法,这里的技能机制和JVM是相似的。技能对应一个线程,内力就对应给该线程分配的内存。
你接着问,那这个程序计数器是干啥的,老者长吁一口气,想着,你这小子没完了,问个没完了。老者无奈的摇了摇头,然后说,这个我也不清楚,你有兴趣的话可以去极地剋哪里看看,可能有人可以解答你的疑问。看出了老者的不耐烦,你也只好扭过头去看台上大佬的表演。
在看了一会表演之后,你就和小美一起回去了,一整晚你都在琢磨,怎么让自己内力增加,进而拥有虚拟机栈和程序计数器,另外极地剋在哪里。
第二天一早,天才蒙蒙亮,你家的门被一脚踹开,这巨大的声响直接把你吓醒,等你朦朦胧胧中缓过神后,才看出这是小美。小美开口道,我知道极地剋在哪了。听到这你可就不困了,随便穿上衣服就让小美带着你去极地剋了。
一路上的风景变化很大,河流逐渐增多,并且越靠近极地剋,水中的鱼越多,越欢快。在经过了两天半的赶路之后,你们终于到了极地剋的大门前。
门是虚掩的,你和小美悄悄溜了进去,正进入,就看见一个人在熟练释放着技能,不同的是他们可以在释放一个技能的途中,可以停止释放另一个技能,而后又可以接着释放上一个技能。你看着其中一个人首先释放了一块寒冰之后,随后又吐出了一团火焰,两种强大的技能一结合,突然亮起白光,然后变成了水蒸气。
你心里想,属实大聪明。就在这时练功的这位大佬,发现了你俩,大吼一声,来者何人。
你赶忙解释出你来的目的,交流之后,这位大佬就给你解答了程序计数器的作用,其实程序计数器的作用就是记录技能的释放到哪一步了,并且每一个技能都会有一个单独的程序计数器,可以记录释放技能时下一步要干啥,并且可以使得在不同的技能之间切换时可以准确的接上下一步要干啥。另外,为了释放技能的准确性,我们会将一个技能又划分为不同的方法,每一个方法占用虚拟机栈的一部分空间,依次进行执行。
这时,你明白了,这就是为啥它可以释放出水蒸气的原因了。
这时,作为好奇宝宝的你,想问一下怎么才能提升自己的内力,大佬微微一笑,看向山下的河流
==============================================================================
内容中可能存在错误,希望大佬们指正,如果有好玩的想法的话,欢迎大家一起交流交流