想要学好Java,对Java虚拟机的学习是不可或缺的,本文就来初步的介绍一下虚拟机,了解虚拟机到底是什么样的存在
二话不说先上图
概念解释
自动内存管理机制:Java讲内存控制的权力交给了虚拟机,由虚拟机来解决编码时所需的内存管理需求,从而实现内存管理自动化的机制。这个机制也是程序一旦出现内存泄漏和溢出的问题时,平时不了解虚拟机的程序员,排查错误将异常困难。
虚拟机执行子系统:
执行子系统是虚拟机必不可少的一部分,其过程由编译class文件、类加载过程、虚拟机字节码执行引擎组成。
程序编译和优化: java程序从源码编译成字节码,再从字节码编译成本地机器码即传统编译器的编译过程,优化也是从这两个部分开始的。
高效并发: java天生适合多线程,高效并发是JVM学习的重要部分
什么是JVM
虚拟机
首先说说什么是虚拟机吧,虚拟机(Virtual Machine)就是一台虚拟的主机,实质上是一款软件,可以用来执行一系列虚拟计算机执行,分为系统虚拟机和程序虚拟机,而Java虚拟机就属于程序虚拟机,它专门为执行单个计算机程序而设计
Java虚拟机
Java虚拟机是一台执行Java字节码的虚拟计算机,他拥有独立的运行机制,其中运行的Java字节码也不一定是有Java编译
JVM平台的各种语言都可以共享JVM的福利,现在java虚拟机已经不再为java一家服务。
Java技术的核心就是Java虚拟机,所有java程序都运行在java虚拟机内部
JVM内存结构
根据JVM规范,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分
- 虚拟机栈
线程私有,每个方法在执行的时候会创建一个栈帧,存储了局部变量表,操作数栈,动态链接,方法返回地址等 - 堆
线程共享,被所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例 - 方法区
线程共享;被所有线程共享的一块内存区域,用于存储已被虚拟机加载的类信息,常量,静态变量等。 - 程序计数器
线程私有,使当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也被称为线程私有的内存 - 本地方法栈
线程私有,主要为虚拟机使用到的Native方法服务。
JVM运行过程
由编译的xxx.java源码通过Java编译器的词法分析、语法分析、语义分析、字节码生成器等过程生成xxx.class字节码文件,然后通过类加载器从文件系统或网络中加载Class文件,通过一系列诸如验证、初始化等过程,存放到内存中的方法区,由虚拟机字节码执行引擎执行代码,输入字节码文件,通过字节码解析输出执行结果。本文主要参考该书: