详细理解Java虚拟机的运行过程
基本概述:
Java虚拟机简称JVM,是JRE中的一部分,也是Java程序运行的最关键的部分。完整的Java运行流程大致包括编译.java文件形成.class文件,然后根据.class文件的内容进行一系列的步骤使整个程序运行起来。其中将.java文件编译为.class文件由Java编译器完成,而由.class文件进而完成整个运行过程则主要是由JVM来完成的。由于所有的编译链接过程都由JRE来完成,所以Java具有良好的平台可移植性,不依赖具体的操作系统。
具体结构及功能:
1、Class Loader:
该子系统主要负责以下三种工作。
一、读取(Loading):Class Loader会首先读取由Java编译器传入的.class文件,然后生成相对应的二进制数据并将其存入方法区,这其中生成的数据主要包括类名、紧邻的父类、各种修饰符、变量和方法的信息。在这之后,JVM会自动给这个类创建一个类型为Class的对象并存入堆中,这个对象可以被程序员调用,从而得到这个类中的相关信息(也就是上面所讲的存入方法区的那些信息)。需要注意的是,一个类只会具有一个Class对象,也就是说,就算有无穷个该类的不同对象,在堆中也只会有一个对应的Class对象。
二、链接(Linking):在读取之后,Class Loader会对.class文件进行正确性验证,看看该类是否被正确定义,同时是否被正确编译。如果验证成功,那么JVM就会为类中的变量分配内存,并且初始化内存为默认值。
三、初始化(Initialization):在这一阶段,所有的静态变量将被正确赋值,赋值的顺序是按照代码顺序从前往后,从父类到子类。
而对于Class Loader来说,其实也大致分为三类。第一类是Bootstrap Class Loader,我们可以理解为最基础的Class Loader,因为它只会处理那些已经被完全信任的class,也就是Java的核心类;第二类是Extension Class Loader,它会处理那些被放置在指定的扩展类文件夹中的类;第三类是Application Class Loader,它处理的是外界定义的类。至于其中的具体不同呢,在此就不展开叙述了。
2、JVM Memory:
JVM的内存区是其存放具体数据和对象的主要区域,总共由以下五部分组成。
一、方法区(Method Area):方法区中主要存取的是Class级别的数据,包括类名,父类名,方法名,变量名和静态变量等等。每一个JVM只有一块方法区,所以是一个可以被所有类和进程共享的区域。
二、堆(Heap Area):堆中存放着所有对象的信息。每一个JVM也只有一个堆,意味着堆也是被共享的。
三、栈(Stack Area):JVM会为每一个线程开辟一个栈区,而每一个栈区中又会分成许多的块(Block),每一个块都代表一个方法调用,方法中的所有本地变量都会存放在栈中相对应的块中。一旦该线程终止,那么这个栈就会被JVM销毁。所以栈区是不共享的。
四、PC计数器(PC Register):记录每一个线程当前运行到的代码地址。显然,每一个线程都会有一个对应的PC计数器,所以也是不共享的。
五、本地方法区(Native Method Area):每一个线程都会有一个本地方法区,其主要存放本地方法的相关信息。
3、Execution Engine:
运行引擎负责真正地运行.class文件,它会一行一行地读取.class中的二进制信息,然后利用JVM Memory中的数据一条一条地执行。垃圾回收器也是在这个引擎中,它可以自动检测不再可能被引用的已分配内存并将其回收。
JVM的大致运行过程到这里就告一段落了。当然,还有许许多多的细节在这里没有列出,如果有需要,查阅官方文档是最好的办法。
详细理解Java虚拟机的运行过程的更多相关文章
- 深入理解Java虚拟机(一) 运行时数据区划分
前言:从我学Java的第一天开始,我的大学老师就告诉我 Java语言相比C.C++的语言有一个非常强大的功能,那就是自动内存管理:我们用Java编码时不需要申请或释放内存等,这些工作全部交由我们的Ja ...
- 深入理解Java虚拟机-JVM运行时数据区域
一.运行时数据区域 1.程序计数器 程序计数器( Program Counter Register) 是一块较小的内存空间, 它可以看作是当前线程所执行的字节码的行号指示器. Java虚拟机的多线程是 ...
- 【转载】深入理解Java虚拟机笔记---运行时栈帧结构
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...
- 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区
Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...
- 深入理解java虚拟机(八)类加载过程详解
类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(In ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具
上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...
- JVM学习(1)——通过实例总结Java虚拟机的运行机制
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...
- Java虚拟机及运行时数据区
1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...
随机推荐
- Global Vectors forWord Representation
参考论文: GloVe: Global Vectors forWord Representation 参考博客:https://blog.csdn.net/coderTC/article/detail ...
- ZOJ 3777 B - Problem Arrangement 状压DP
LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:有N(\( N <= 12 \))道题,排顺序 ...
- python 操作PPT练习
from pptx import Presentation from pptx.util import Pt, Inches prs = Presentation() slide = prs.slid ...
- 【BZOJ】1576 [Usaco2009 Jan]安全路经Travel
[算法]最短路树+(树链剖分+线段树)||最短路树+并查集 [题解] 两种方法的思想是一样的,首先题目限制了最短路树唯一. 那么建出最短路树后,就是询问对于每个点断掉父边后重新找路径的最小值,其它路径 ...
- vue-router.esm.js?fe87:16 [vue-router] Route with name 'page' does not exist
本文地址:http://www.cnblogs.com/veinyin/p/7910525.html 我的路由配置 { path: '/page', name: page, component: pa ...
- UTF8字符串转换为汉字 c#
using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...
- 一键切图 PS 动作 【收藏】
使用方法 一键切图动作.zip 1. 下载动作 2. 打开PS 动作 窗口,导入动作 3. 选中图层后 点击 F2 一键切图 详情看原文链接 原文链接
- device tree --- #address-cells and #size-cells property
device tree source Example1 / { #address-cells = <0x1>; // 在 root node 下使用 1 個 u32 來代表 address ...
- angular项目中使用jquery的问题
1.使用npm命令往项目中添加jQuery. npm install jquery --save 2.在你想要用jQuery的组件中添加. import * as $ from "jquer ...
- Nginx 原理篇
前言 在学习 Nginx 之前,我们首先有必要搞清楚下面几个问题: 1. Web服务器是怎么工作的? 2. Apache 与 Nginx 有何异同? 3. Nginx 工作模式是怎样的? 下面就围绕这 ...