博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM概念及工作原理
阅读量:7168 次
发布时间:2019-06-29

本文共 1104 字,大约阅读时间需要 3 分钟。

hot3.png

1.什么是JVM

JVM是一个想象中的机器,在实际的计算机上通过软件模拟来实现。JVM有自己想象中的硬件,如:处理器、堆栈、寄存器等,还具有相应的指令系统。

2. 为什么要使用JVM

Java语言的一个非常重要的特点就是平台无关性。而使用JVM是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入JVM后,Java语言在不同平台上运行时不需要重新编译。Java语言使用JVM屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在JVM虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,把字节码解释成具体平台上的机器指令执行。

3. JVM工作原理

JVM 主要由  ClassLoader  和 行引擎 两子系统 组成,运行数据区分为五个部分: 方法区、堆、栈、程序计数器、本地方法栈。其中的方法区和堆是所有线程共享的,JVM将临时变量放在栈中,每个线程都有自己独立的栈空间和程序计数器。

任何一个Java类的main函数运行都会创建一个JVM实例,当main函数结束时,JVM实例也就结束了。JVM实例启动时默认启动几个守护线程,比如:垃圾回收的线程,而 main 方法的执行是在一个单独的非守护线程中执行的。只要母线程结束,子线程就自动销毁,只要非守护main 线程结束JVM实例就销毁了。

那么在Java类main函数运行过程中,JVM的工作原理如下:

(1) 根据系统环境变量,创建装载JVM的环境与配置

(2) 寻找JRE目录,寻找jvm.dll,并装载jvm.dll;

(3) 根据JVM的参数配置,如:内存参数,初始化jvm实例;

(4) JVM实例产生一个引导类加载器实例(Bootstrap Loader),加载Java核心库,然后引导类加载器自动加载扩展类加载器(Extended Loader),加载Java扩展库,最后扩展类加载器自动加载系统类加载器(AppClass Loader),加载当前的Java类;

(5) 当前Java类加载至内存后,会经过验证、准备、解析三步,将Java类中的类型信息、属性信息、常量池存放在方法区内存中,方法指令直接保存到栈内存中,如:main函数;

(6) 执行引擎开始执行栈内存中指令,由于main函数是静态方法,所以不需要传入实例,在类加载完毕之后,直接执行main方法指令;

(7) main函数执行主线程结束,随之守护线程销毁,最后JVM实例被销毁;

转载于:https://my.oschina.net/u/2286631/blog/879559

你可能感兴趣的文章
spring冲刺第三天
查看>>
【排序】插入排序:最稳定:时间复杂度O(n^2)
查看>>
kickstart技术安装操作系统
查看>>
Elementary Methods in Number Theory Exercise 1.4.11
查看>>
mac 使用
查看>>
错题本
查看>>
git使用
查看>>
ASP.NET進階權限控管
查看>>
su root 和su - root 的区别
查看>>
并查集 POJ 1611 The Suspects
查看>>
一个奥运奖牌榜的小调用
查看>>
C++ 文件复制
查看>>
TYVJ P1082 找朋友 Label:字符串
查看>>
Ambari 介绍
查看>>
Guess Number
查看>>
在Eclipse中配置Tomcat 创建和运行Servlet/JSP
查看>>
Javascript:DOM动态创建元素实例应用
查看>>
jQuery操作cookie
查看>>
11-03笔记图
查看>>
时间戳解读
查看>>