资讯专栏INFORMATION COLUMN

JVM架构哪些事

ghnor / 3295人阅读

摘要:线程守护线程通常是虚拟机自己使用,比如线程,但是程序可以将自己的线程设置为守护线程,但是必须在方法之前调用用户线程即方法执行的线程当程序中所有的非守护线程即用户线程都结束时,虚拟机实例将自动退出。

JAVA虚拟机

每一个java程序都是运行在某个具体的java虚拟机实现的实例上,一个java虚拟机负责运行一个java程序,当启动一个java程序的时候,一个虚拟机就诞生了,当该程序关闭时,这个虚拟机实例也就随之消亡。

1 JVM线程

守护线程;通常是虚拟机自己使用,比如GC线程,但是java程序可以将自己的线程设置为守护线程,但是必须在start()方法之前调用

用户线程:即main方法执行的线程

当程序中所有的非守护线程(即用户线程)都结束时,虚拟机实例将自动退出。因而,守护线程不适合做IO操作,因为守护线程是在所有的非守护线程推出后结束,这样并不能代表守护线程是否完成了相应的操作,如果非守护线程退出后,还有大量的数据没有写,将会引发数据丢失问题

2 JVM结构

-类装载子系统

每一个JVM都有一个类装载系统,它会跟著给定的全限定名来装载类型、class文件等

执行引擎

每一个JVM都有一个执行引擎,他负责执行哪些包含在装载类中的指令

运行时数据区

当JVM运行一个程序的时候,它需要内存来进行存储很多的东西,比如计算时的中间变量,程序创建的对象,返回值等等,运行时数据区就类似于内存,存存这些东西,每个运行区包含方法区,堆,JAVA栈,PC寄存器,本地方法栈等
(1)当虚拟机装载一个class文件时,它会从class文件包含的二进制数据中解析类型信息,然后将这些信息放在方法区中

(2)当程序运行的时候,虚拟机就会把所有线程在运行时创建的对象都放在堆中

(3)如果线程正在执行的是一个JAVA方法,那么寄存器的值(程序计数器)总是指向下一条将被执行的指令

(4)JAVA栈则总是存储该线程中JAVA方法调用的转台--包括它的局部变量、被调用时传进来的参数、返回值、以及中间结果等等。JAVA栈是由很多的栈帧或这说是帧等组成,一个栈帧包含一个方法调用状态,当现场调用一个JAVA方法的时候,虚拟机压入一个方法到该线程的JAVA栈中,当方法返回时,这个栈帧就会从JAVA栈中弹出并抛弃

3 类加载器

JAVA类加载器是JAVA运行时环境的一部分,负责动态的将JAVA类加载到JAVA虚拟机的内存空间中,类通常是按需加载,即第一次使用该类时才加载,类装载系统除了要定位和导入二进制class文件外,还必须验证被导入类的数据的正确性,为变量分配初始化内存,以及帮助解析符号引用等,这些动作按照以下循序执行

(1)装载-查找并装载二进制数据

(2)链接-执行验证、准备等

(3)初始化

4 启动类装载器

由原生代码c++编写,它负责加载核心JAVA库

5 用户自定义类装载器

继承classloard类,用户自定义的类装载器

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69660.html

相关文章

  • 三年百度,五年阿里,阿里p8架构师浅谈:我是如何顺利进入BAT

    摘要:三年百度,五年阿里,阿里架构师浅谈我是如何顺利进入前些天在我群里认识了以为挺有意思的老哥,他也是工作年多技术和面试都不差,最近也是在找工作,是从京城来魔都的,也和他捞了不少。 说来惭愧,也不怕你们笑话。做开发8年多,到目前还是一名不折不扣的扫地僧。年前的辞职,到现在还在家静养中。其实也没什么,就是回家总结一下自己这些年来在外工作与面试等做一个简单的总结与反思。做一下自己后面一个人生规划...

    seanlook 评论0 收藏0
  • 后端知识拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞这个词来自操作系统的线程进程的状态模型网络爬虫基本原理一后端掘金网络爬虫是捜索引擎抓取系统的重要组成部分。每门主要编程语言现未来已到后端掘金使用和在相同环境各加载多张小图片,性能相差一倍。 2016 年度小结(服务器端方向)| 掘金技术征文 - 后端 - 掘金今年年初我花了三个月的业余时间用 Laravel 开发了一个项目,在此之前,除了去年换工作准备面试时,我并...

    CoderBear 评论0 收藏0
  • 后端知识拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞这个词来自操作系统的线程进程的状态模型网络爬虫基本原理一后端掘金网络爬虫是捜索引擎抓取系统的重要组成部分。每门主要编程语言现未来已到后端掘金使用和在相同环境各加载多张小图片,性能相差一倍。 2016 年度小结(服务器端方向)| 掘金技术征文 - 后端 - 掘金今年年初我花了三个月的业余时间用 Laravel 开发了一个项目,在此之前,除了去年换工作准备面试时,我并...

    Carl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<