Java代码是如何运行的

为什么Java要在虚拟机里运行

JRE:Java的运行时环境。
JRE仅包含运行Java程序的必须组件,包括Java虚拟机以及Java核心类库等。
Java虚拟机是将Java代码转换为字节码。
Java虚拟机可以有硬件实现,也可以用软件实现。使用软件实现的好处,一旦一个程序被转换为Java字节码,那么它便可以在不同平台上的虚拟机实现里运行。
虚拟机的另外一个好处:托管环境,自动内存管理与垃圾回收。

Java虚拟机具体是怎样运行Java字节码

虚拟机

从虚拟机的角度来看,执行Java代码首先需要将它编译而成的class文件加载到java虚拟机中。
加载后的Java类会被存放于方法区。实际运行时,虚拟机会执行方法区内的代码。
Java虚拟机在内存中划分出堆和栈来存储运行时数据。Java虚拟机会将栈细分为面向Java方法的Java方法栈(存放局部变量以及字节码的操作数)、
面向本地方法栈、以及存放各个线程执行位置的PC寄存器。

从硬件角度来看,Java虚拟机需要将字节码翻译成机器码。
解释执行:即逐条将字节码翻译成机器码并执行(无需等待编译)。即时编译:即将一个方法中包含的所有字节码编译成机器码后在执行(实际运行速度更快)。
HotSpot默认采用混合模式,先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。

Java虚拟机的运行效率是怎么样的

HotSpot提供了C1、C2和Graal(Java10)编译器。

C1又叫做Client编译器,面向的是对启动性能有要求的客户端GUI程序,采用的优化手段相对简单,因此编译时间较短。
C2又叫做Server编译器,面向的是对峰值性能又要求的服务端程序,采用的优化手段相对复杂,因此编译时间较长。

从Java7开始,HotSpot默认采用分层编译的方式:热点方法会先被C1编译,而后热点方法中的热点会进一步被C2编译。
HotSpot的即时编译是放在额外的编译线程中进行的。HotSpot会根据CPU的数量设置编译线程的数目,并且按1:2的比例
配置为C1和C2编译器。

Java虚拟机会将boolean类型看作是int类型。true就是1,false是0。

类型 值域 默认值 虚拟机内部符号
boolean {false,true} false Z
byte [-128,127] 0 B
short [-32768,32767] 0 S
char [0,65535] '\u0000' C
int [-231,231-1] 0 I
long [-263,263-1] 0L J
float ~[-3.4E38,3.4E38] +0.0F F
double ~[1.8E308,1.8E308] +0.0D D

不管何种类型,拥有不同的值域,但默认值在内存中均为0。

声明为byte、char以及short的局部变量,是可以存储超过它们取值范围的数值,在存储的时候,Java虚拟机会进行掩码操作。
在读取时,Java虚拟机则会将其扩展为int类型。

将boolean保存在静态域中,制定了其类型为'Z',当修改为2时取低位最后一位为0,当修改为3时取低位最后一位为1。
说明boolean的掩码处理是取低位的最后一位。

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

推荐阅读更多精彩内容