`

Java虚拟机生命周期和体系结构

 
阅读更多
1. Java虚拟机的生命周期

    一个运行时的Java虚拟机负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当程序关闭退出,这个虚拟机实例也就随之消亡。如果在同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。

    Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是public static的,返回值为void,并且接受一个String[]数组作为参数。任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。告诉Java虚拟机要运行的Java程序中初始类的名字,整个程序将从它的main()方法开始运行。

    Java程序初始类中的main()方法,将作为该程序初始线程的起点,任何其他的线程都是由这个初始线程启动的。

  Java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。 但是,Java程序也可以把它创建的任何线程标记为守护线程。而Java程序中的初始线程-就是开始于main()的那个是非守护线程。

   只要还有任何非守护线程在运行,那么这个Java程序也在继续运行(虚拟机仍然存活)。当程序中的所有的非守护线程都终止时,虚拟机实例自动退出。假如安全管理器允许,程序本身也能够通过调用Runtime类或者System类的exit()方法退出。


2. Java虚拟机的体系结构


   在Java假虚拟机规范中,一个虚拟机实例的行为时分别按照子系统、内存区、数据类型以及指令这几个术语来描述的。这些组成部分一起展示了抽象的虚拟机的内部抽象体系结构。


  当Java虚拟机运行一个程序时,它需要内存来存储多个东西、例如,字节码、从已装载的class文件中得到的其他信息、对象、方法参数、返回值、局部变量以及运算的中间结果等等,Java虚拟机把这些东西组织到几个"运行时数据区"中,以便于管理。

   尽管这些"运行时数据区"都会以某种形式存在于每一个Java虚拟机实现中,但是规范对它们的描述却是相当抽象的。这些运行时数据区结构上的细节,大多数由具体实现的设计者决定。
 
   某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有,每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,它把这些类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。



   当每一个线程被创建时,它都将得到它自己的PC寄存器(程序计数器)以及一个Java栈:如果线程正在执行一个Java方法(非本地方法),那么PC寄存器的值将总是指示下一条将被执行的指令,而它的Java栈则总是存储该线程中Java方法调用的状态-包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中间结果等。而本地方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他某些与特定实现相关的内存区中。

  Java栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中:当该方法返回时,这个栈帧被从Java栈中弹出被抛弃。   

   Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。这样设计的原因是为了保持Java虚拟机的指令尽量紧凑,同时也便于Java虚拟机在那些只有很少通用寄存器的平台上实现。Java虚拟机的这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。

   Java虚拟机为每一个线程创建的内存区,这些内存区域是私有的。任何线程都不能访问另一个线程的PC寄存器或者Java栈。

  


 
   如图展示了一个虚拟机实例的快照,它有三个线程正在执行。线程1和线程2都正在执行Java方法,而线程3则正在执行一个本地方法。Java栈都是向下生长的,而栈顶都显示在图的底部。当前正在执行的方法的栈帧以浅色表示,对于一个正在运行Java方法的程序而言,它的PC寄存器总是指向下一条将被执行的指令。
  
  • 大小: 25.6 KB
  • 大小: 39.9 KB
  • 大小: 45.9 KB
分享到:
评论
16 楼 nrxqq 2010-06-26  
学了这么长时间java了都不知道有这么神奇的东西
15 楼 MySSH 2010-06-25  
写得不错~~研究研究
14 楼 xiaojing3517 2010-06-24  
看来楼主是一边看Thinking in Java 一边看这本书啊。。。
13 楼 southking 2010-06-24  
看图片貌似是《深入java虚拟机》里的截图。。
12 楼 lianzerong 2010-06-24  
文章有什么不对么 ? 为什么投那么多的隐藏帖 ?
11 楼 iq527 2010-06-24  
额,发错      囧
10 楼 piao_bo_yi 2010-06-24  
和OS里面讲进程与线程的东西差不多。
9 楼 lydawen 2010-06-24  
看了截图,像《深入java虚拟机》第二版,还是D版的书(图像)。
8 楼 weishuang 2010-06-23  
这本书好像已经没有卖的了,一年前我就在各大网站上找,找不到卖的了,只有电子版,不清晰
7 楼 maozj 2010-06-23  
weiyc_16000 写道
条理清楚,逻辑清晰,期待楼主的后续文章。

BTW,能否推荐以下Java虚拟机相关书籍?


目前只有 Bill venners的深入java虚拟机了
6 楼 mercyblitz 2010-06-23  
楼主的图像欢得勤啊
5 楼 maozj 2010-06-23  
书中的内容很是值得讨论学习 如果你有其他分享 一起分享
4 楼 maozj 2010-06-23  
冇心人 写道
上面的内容,好像就是书里面的...


是Bill vinners 的深入java虚拟机

3 楼 冇心人 2010-06-23  
上面的内容,好像就是书里面的...
2 楼 冇心人 2010-06-23  
weiyc_16000 写道
条理清楚,逻辑清晰,期待楼主的后续文章。

BTW,能否推荐以下Java虚拟机相关书籍?

有本书叫深入java虚拟机.
1 楼 weiyc_16000 2010-06-23  
条理清楚,逻辑清晰,期待楼主的后续文章。

BTW,能否推荐以下Java虚拟机相关书籍?

相关推荐

    Java虚拟机和Java程序的生命周期?

    类加载器分为:Java虚拟机自带的加载器和用户自定义的类加载器; Java虚拟机自带的类加载器包括:启动类加载器,扩展类加载器,系统类加载器三种。 用户自定义的类加载器是ClassLoader类的实例,通过它来定制类的...

    java虚拟机的详细原理

    一、什么是Java虚拟机 二、Java虚拟机的生命周期 三、Java虚拟机的体系结构

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

    Java虚拟机

    Java虚拟机的生命周期 Java虚拟机的体系结构 类加载器 执行引擎

    深入JAVA虚拟机第二版.pdf 目录

    第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...

    java-jvm虚拟机原理.ppt

    详细介绍了jvm生命周期和体系结构及垃圾回收机制

    深入Java虚拟机(原书第2版)及书中源代码

    第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...

    深入Java虚拟机

    5.2 Java虚拟机的生命周期 5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 ...

    jvm虚拟机原理.ppt

    经典JVM PPT,可以直接讲课的 java虚拟机原理介绍 Java虚拟机生命周期 Java虚拟机体系结构 Java 的class文件

    java虚拟机(jvm)介绍以及相关参数设置与调优

    虚拟机的相关参数设置与调优,介绍了一些jvm的体系结构,垃圾回收的方法,java对象的生命周期与分代。

    深入java虚拟机中文第2版

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    深入java虚拟机第二版

    5.2 Java虚拟机的生命周期 5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 5.3.9 本地方法...

    深入JAVA虚拟机(第2版)

    5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 5.3.9 本地方法栈 5.3.10 ...

    很入理解JVM体系

    4、JVM生命周期 5、三大流行的JVM 2.2、JVM体系结构 1、类加载器 2、执行引擎 3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile ...

    深入java虚拟机

    第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...

    理解Android虚拟机体系结构

    Dalvik是Google公司自己设计用于Android平台的Java虚拟机,...Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。Dalvik充分利

    JVM详解-淘宝内部资料

    有了它,你将学到这些:java虚拟机的生命周期,JVM的体系结构,各部分详解,GC机制等

    java初学者必看

    1.7.2 Java虚拟机的生命周期 1.7.3 Java虚拟机的体系结构 1.8 垃圾收集器 1.9 本章习题 第2章 Java开发环境 2.1 J2SE的下载和安装 2.1.1 J2SE的下载 2.1.2 J2SE的安装 2.2 环境变量的配置与测试 2.2.1 设置...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    线程的创建方式与生命周期 线程核心机制,基础概念扩展 多线程并发访问,同步控制 线程间通信,等待/通知机制 锁锁机制,API详解 Fork/Join 框架机制详解 Executor线程池框架简介 面向对象 泛型机制与反射原理 ...

    疯狂JAVA讲义

    学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 学生提问:为什么不安装公共JRE系统呢? 9 1.4.2 设置PATH环境变量 10 学生提问:为什么选择设置用户变量,用户变量和系统变量有...

Global site tag (gtag.js) - Google Analytics