全国热线

025-86901720

全国监督投诉热线:9:00-23:00

你知道java虚拟机的体系结构吗

关于java虚拟机的体系结构,有些人没有学明白,包括南京学码思java培训班学员,有些人第一次接触,学得一脸懵懂。今天学码思java培训老师就针对这部分必须要了解的内容,来给大家再详细讲解一下,希望能对java学员有所帮助。

学习java开发不可忽视的一个重点知识就是java虚拟机,你知道java虚拟机的体系结构吗?有些人没有学明白,包括南京学码思java培训班学员,有些人第一次接触,学得一脸懵懂。今天学码思java培训老师就针对这部分必须要了解的内容,来给大家再详细讲解一下,希望能对java学员有所帮助。

你知道java虚拟机的体系结构吗

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


Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序,而这个main()方法必须是共有的(public)、静态的(static)、返回值为void,并且接受一个字符串数组作为参数,任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。


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


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


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


Java虚拟机的体系结构


每个Java虚拟机都有一个类装载子系统,它根据给定的全限定名来装入类型(类或接口),同样每个Java虚拟机都有一个执行引擎,它负责执行那些包含在被装载类的方法中的指令。


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


某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有,每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有的线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息,然后把这些类型信息放到方法区中,当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。


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


通过上述介绍,不知道大家是不是能有了进一步了解了呢?作为一家专业的java培训机构,学码思除了有专业老师面授课程,教学视频还会放在教学系统中,如果大家有学不明白的,可以反复回看视频进一步消化理解,有问题也可以及时请教提问。如果你也想获得学码思java教程和直接课程资料的话,欢迎直接联系在线老师,进一步沟通交流。


上一篇:如何计算java对象占用内存大小
下一篇:Java和C/C++的编译过程有什么不同

相关推荐

免费试听 | 学费咨询 | 在线报名 | 申请补贴 | 软件培训 | 网站地图

2016-2020 南京学码思教育科技有限公司 .All Rights Reserved

苏ICP备16033487号 www.njxms.com.cn

全国热线

400-080-3312

全国监督服务热线:9:00-23:00