JVM-相关概念

Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。
Java技术的核心就是Java虚拟机(JVM,Java Virtual Machine),因为所有的Java程序都运行在Java虚拟机内部。

  • 作用
    Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。
  • 特点
    ▶一次编译,到处运行。
    ▶自动内存管理。
    ▶自动垃圾回收。

JVM是运行在操作系统之上的,它与硬件没有直接的交互。不同的操作系统装的JVM是有区别的。

JVM的整体结构

类装载器子系统将字节码文件加载到内存中生成Class对象然后在执行引擎解释运行。这个过程中涉及到加载->链接->初始化。在内存中多线程共享堆和方法区。每个线程独有一份Java虚拟机栈,本地方法栈和程序计数器。

1程序计数器:每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执行的是navtive方法,则其值为null。

2Java虚拟机栈:线程私有,每个线程对应一个Java虚拟机栈,其生命周期与线程同进同退。每个Java方法在被调用的时候都会创建一个栈帧,并入栈。一旦完成调用,则出栈。所有的栈帧都出栈后,线程也就完成了使命。

3本地方法栈:功能与Java虚拟机栈十分相同。区别在于,本地方法栈为虚拟机使用到的native方法服务。

4堆:堆是JVM内存占用最大,管理最复杂的一个区域。堆是所有线程共享的一块区域,主要用来存放对象和数组。在Java虚拟机规范中有描述:所有的对象实例和数组都要在堆上分配。但是随着JIT(JUST-IN-TIME)编译器的发展与逃逸分析技术的逐渐成熟,并不是所有对象都只在堆上分配了,比如:随着逃逸分析技术的逐渐成熟,在即使能被回收的对象也有肯能会在虚拟机栈上分配。
1.7后,字符串常量池从永久代中剥离出来,存放在堆中。堆有自己进一步的内存分块划分。

5执行引擎:分为解释器、JIT编译器(后端编译器)【编译反复执行的热点代码】和垃圾回收器。操作系统只能识别机器指令,但是字节码指令不等同于机器指令。要想字节码文件能够解释执行就需要借助执行引擎,把高级语言翻译成机器语言。

Java代码的执行流程

JVM的架构模型

Java编译器输入的指令流基本上是一种基于栈的指令集架构。
基于栈式架构的特点:
▶设计和实现简单(Java程序的运行通过方法实现,每执行一个方法可以理解为一个入栈操作,栈顶就是当前正在执行的方法,方法执行完做一个出栈的操作就可以了),适用于资源受限的系统(嵌入式设备、小型设备)
▶避开了寄存器的分配难题;使用零地址指令(没有地址,只有操作数)方式分配
▶指令流中的指令大部分是零地址指令,其执行流程依赖于操作栈(只需要操作栈顶)。指令集更小(字节码文件中每8位字节进行对齐),编译器容易实现
▶不需要硬件支持,可移植性更好,更好实现跨平台(因为栈是内存层面的)
▶缺点是性能下降,实现同样的功能需要更多的指令

JVM的生命周期

虚拟机的启动

Java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类由虚拟机的具体实现指定的。

虚拟机的执行

▶一个运行中的Java虚拟机的任务是执行Java程序
▶程序开始执行时他才运行,程序结束他就停止
▶执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程

虚拟机的退出

▶程序正常执行结束
▶程序在执行过程中遇到了异常或错误而异常终止
▶由于操作系统出现错误从而导致Java虚拟机进程终止
▶某线程调用调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作(主动结束程序执行)
▶Java本地方法接口(JNI-Java Native Interface)规范中描述的用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

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

推荐阅读更多精彩内容

  • 本系列文章整理全基于对《深入理解Java虚拟机:JVM高级特性与最佳实践》的阅读理解之上,其中大部分的概念解释及说...
    LeonardoEzio阅读 370评论 0 1
  • 虚拟机整体结构 我们先来张图看看虚拟机的整体结构 我们可以从上图看出,JVM大概可以分为以下几部分内容:类加载器、...
    CyrusChan阅读 242评论 0 0
  • JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个...
    小菜一碟i阅读 338评论 0 0
  • 1、概述 JVM是Java Virtual Machine(Java虚拟机)的缩写,是一种用于计算设备的规范,它是...
    高丕基阅读 6,980评论 3 73
  • 1.前言 Android的虚拟机是根据移动设备的特点基于Java虚拟机(JVM)改进而来,虽然没有保留规范,但作为...
    lanceJin阅读 1,684评论 1 19