你很有想法,跟我学做菜吧No.3

我是小蕉。

今天,小蕉我就跟大家聊聊JAVA虚拟机,是个什么玩意。

通俗来讲,JAVA虚拟机的作用呢,就跟一个转换插头,一样一样的。同志们!!!有没有遇到这种情况,在找充电插头,找了半天发现特么的我是两头插头,而插座,却只有三头的T_T。可以哭嘛?自从自己出门常备转换头,哎呀突然天亮了,天亮了!!!外面插孔是什么样子的?老子才不在乎。反正老子的手机充电器都能通过转换插头,充电啦!!但是麻烦的地方呢,其实还是有的,就是我兜里经常会放着七八个转换插头。。。

Java虚拟机就是这样的一个存在,在各个平台上都能跑JAVA程序,但是程序并不在主机上跑,而是在虚拟机上跑。所以每个平台都各自会有自己的虚拟机实现。这样,JAVA程序就能实现一次编写,处处运行了。

JAVA跑的时候呢,跟炒菜似得。首先要把.java剁碎成.class,然后由我这个类加载器来校验搬运,在运行时环境这个锅中,用虚拟机引擎来进行炒菜,然后使用自动回收的垃圾桶来进行GC,一样一样的。

来来来,我们来一个一个捋一捋。


怎么把.java剁碎成.class呢?这个.java啊,就是我们普通程序猿写的那些鬼代码,而.class呢,就是虚拟机统一接受的字节码。那这个过程究竟是怎么样的呢?就要说到编译器这个东西了。jdk里有编译器,叫javac,是用来编译的。

用一句人都听不懂的话来说,编译器就是一个检查java语法然后把它按照既定逻辑转换成只有java虚拟机能看懂的叫字节码的玩意。

举个栗子:

int i = 5 ;

编译成

0:bipush    5

2:istore_0

然之后呢,.java就被剁碎成.class文件了。接下来就要上!锅!啦!

好了,咱再准备准备,你说是.class文件就是.class文件啊??我才不信呢。让我用类加载器的七道工序来准备准备。

加载->校验->准备->处理->初始化->使用->卸载。

共七道工序,由七七四十九重天浓缩而成。

最顶上的是帝君,是BootstrapClassLoader,是所有加载器的神,使用C/C++写的,其中非常有名的Object就是在这里初始化的呢。它的继任者天君ExtensionClassLoader,太子ApplicationClassLoader,以及其他的众神UserDefinedClassLoder。遵循双亲委派模式,就是什么意思呢,就是能让你老子出面的,你就别自己瞎折腾了,也就是靠关系了。没错就是每个类加载过程中,都会向上层申请加载,上层处理不了的,才会自己去加载。


好了,菜已经被证明了它是菜了。终于可以上锅了,锅呢,就是执行引擎。目前来说分两类,一类的JIT就是编译并执行的玩意叫JIT编译器,另一类呢就是直接解析执行字节码的玩意叫字节码解释器。两类都存在,虚拟机上的一般是字节码解释器。这个锅有什么用呢?除了用来炒菜之外没什么卵用。

但是谁说一道菜是能一次性就抄完的呢?肯定要拼盘啊,翻炒,去水,过冷水,就需要一些盘子了吧,JAVA虚拟机里边叫运行时环境,就是用来放一些中间数据和中间过程指令的。 从用途分呢,分为六类。分别是归属于整个虚拟机的堆,方法区,运行时常量池,以及归属于每个线程自有的PC程序计数器,JVM方法栈,本地方法栈。每个盘子都有它自己的用处。我们用一个例子来说吧。

public class shiter{

public static String b = "some shit";

public void init(){

String a = new String("some shit else");

a+="a";

a.intern();

}

}

好了,让我们把它们慢慢归位,放到属于他们的盘子里边去。

"some shit"     => 运行时常量池

new String()    => 堆

"some shit else"=> 运行时常量池

a+="1"          => JVM方法栈

a.intern        => 本地方法栈

组织过程的指令 => PC程序计数器

从GC来分呢,可以分为。young{Eden,Survivor-from,Survivor-to},Old,Permanent。一般来说young中的Eden和Survivor比例为3:2,是最容易被GC Collector回收掉的。Old区域则比较难回收。Permanent要么不回收,只有在Perm满的时候或者FullGC的时候会回收。各种GC回收策略后面可以单独开一门课了,总之呢,GC就跳软柿子捏,谁背后没有程序引用靠山了,就会被清掉,如果没空间了,那么就全部一起捏扁。


好了菜就炒到这里,需要找我当大厨的,就长按二维码关注吧,喜欢的就分享一下呗。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容