当前位置:  编程技术>java/j2ee

深入解析java虚拟机

    来源: 互联网  发布时间:2014-10-27

    本文导语:  java虚拟机是什么 “java虚拟机”可能指以下三种东西:1)、抽象规范;2)、一个具体的实现;3)、一个运行中的虚拟机实例; java虚拟机生命周期启动当启动一个java程序时,一个虚拟机实例诞生。虚拟机实例通过调用某个初...

java虚拟机是什么

“java虚拟机”可能指以下三种东西:
1)、抽象规范;
2)、一个具体的实现;
3)、一个运行中的虚拟机实例;

java虚拟机生命周期

启动
当启动一个java程序时,一个虚拟机实例诞生。
虚拟机实例通过调用某个初始类的public static void main(String[] args)方法来运行一个java程序。
任何拥有这样一个main方法的类都可以作为java程序运行的起点,所以必须要告诉虚拟机初始类的名称,整个程序将从它的main方法开始运行。

消亡
初始类的main方法作为程序初始线程的起点,任何其他线程都是由初始线程启动。
java虚拟机内部有两种线程:守护线程和非守护线程。
守护线程,通常是虚拟机使用的线程,如执行垃圾收集。java程序也可以把创建的线程标记为守护线程。
非守护线程,java中的初始线程,就是开始于main方法的线程是非守护线程。
只要程序中有非守护线程在运行,那么java程序也在继续运行(虚拟机仍然存活),当程序中所有的非守护线程都终止时,虚拟机实例自动退出。
程序本身也可以通过Runtime类或System类的exit()方法退出。

java虚拟机体系结构

类装载子系统
1)、负责查找并装载类型,分成装载、连接和初始化,在java类型生命周期中有详细说明;
2)、有两种类装载器:启动类装载器和用户自定义类装载器;
用户自定义类装载器必须派生自java.lang.ClassLoader类。

运行时数据区

方法区
被装载类型的信息存储在方法区中,详细如下:
基本信息
1)、类型的全限定名;
2)、类型的直接超类的全限定名;
3)、类型是类类型还是接口类型;
4)、类型的访问修饰符;
5)、直接超接口的全限定名;

其他信息
1)、类型的常量池;
2)、字段信息;
3)、方法信息;
4)、除了常量以为的所有静态变量;
5)、一个到ClassLoader类的引用;
6)、一个到Class类的引用;


1)、运行时创建的所有类实例和数组都放在堆中;
2)、一个java虚拟机实例只存在一个堆空间,因此虚拟机中的所有线程都共享这个堆;
3)、一个java程序独占一个java虚拟机实例,因此每个java程序都有他自己的堆空间;

java栈

1)、每启动一个新线程时,java虚拟机都会为他分配一个java栈;
2)、java栈以帧为单位保存线程的运行状态;
3)、java虚拟机对java栈只执行两种操作:压栈和出栈;
4)、压栈:每当线程调用一个java方法时,虚拟机都会在该线程的java栈中压入一个新帧。使用这个帧来存储参数、局部变量、中间运算结果等;
5)、出栈:当java方法通过return正常返回,或通过抛出异常中止,虚拟机都会将当前帧弹出java栈然后释放掉;
6)、栈数据是线程私有的,所以不需要考虑多线程情况下栈数据的访问同步问题;

栈帧
1)、栈帧由三部分组成:局部变量区、操作数区和栈数据区;

PC寄存器
1)、对于运行中的java程序,每个线程都有自己的pc寄存器;
2)、线程启动时创建;
3)、当线程执行某个java方法时,PC寄存器的内容总是下一条将被执行指令的地址。

本地方法栈
1)、任何本地方法接口都会使用本地方法栈;

执行引擎
1)、执行引擎是java虚拟机实现的核心;
2)、“执行引擎”可以有三种理解:
  a)、一个是抽象的规范;
      b)、一个是具体的实现;
      c)、一个是正在运行的实例;
3)、执行引擎的行为使用指令集来定义。对于每条指令,规范都规定了执行该指令时应该处理什么,如果处理不做规定;
待细化。。。


    
 
 

您可能感兴趣的文章:

  • 深入解析C中的数值与真假
  • c/c++中变量的声明和定义深入解析
  • 深入解析C语言中常数的数据类型
  • 深入解析mysql中order by与group by的顺序问题
  • 深入解析Linux下MySQL数据库的备份与还原
  • 基于android中读取assets目录下a.txt文件并进行解析的深入分析
  • 深入解析StringBuffer和StringBuilder的区别
  • c++关键字mutable深入解析
  • 内联函数inline与宏定义深入解析
  • 深入解析Oracle参数及参数文件
  • Grow heap (frag case) 堆内存过大的深入解析
  • 深入解析mysql.sock不见的问题
  • 引用参数和传值参数的区别深入解析
  • Android中asset文件夹与raw文件夹的区别深入解析
  • EditText属性深入解析
  • 深入解析int(*p)[]和int(**p)[]
  • [Oracle] RAC 之 - 负载均衡深入解析
  • C#中IList<T>与List<T>的区别深入解析
  • 深入解析System.load 与 System.loadLibrary
  • C# interface与delegate效能比较的深入解析
  • 荐书一本——《深入理解linux虚拟内存管理》
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢
  • 网络技术 iis7站长之家
  • 深入多线程之:深入分析Interlocked
  • ##想买书深入学习linux下的编程,请指教
  • 深入JDBC sqlserver连接写法的详解
  • 深入oracle特定信息排序的分析
  • 深入分析C中不安全的sprintf与strcpy
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3