`
wuxiaozeng2440
  • 浏览: 27268 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM简介

    博客分类:
  • Java
 
阅读更多

JVM 全称是Java Virtual Machine,Java 虚拟机,也就是在计算机上再虚拟一个计算机.JVM是运行在操作系统之上的,它与硬件没有直接的交互。
JVM 中我们最需要深入理解的就是它的存储部分,JVM 是一个内存中的虚拟机,那它的存储就是内存了,我们写的所有类、常量、变量、方法都在内存中,这决定着我们程序运行的是否健壮、是否高效。

参考了网上广为流传的JVM 构成图,我们知道整个JVM 分为四部分:
1.Class Loader类加载器
Class Loader承担把一个.class文件加载到内存中。它只管加载符合文件结构的.class文件,至于能不能运行,它不负责。那是由Execution Engine 负责的。

2.Execution Engine 执行引擎
执行引擎也叫做解释器,复杂解释命令,提交操作系统执行。

3.Native Interface 本地接口
本地接口的作用死融合不同的编程语言为java所用。java要调别的程序,就在内存中专门开辟一块标记为native的代码区域,它的具体做法是Native Method Stack 中登记native 方法,在Execution Engine 执行时加native libraies

4.Runtime data area 运行数据区
运行数据区是整个JVM 的重点。我们所有写的程序和所有的数据都被加载到这里,之后才开始运行。它包括以下五部分:

(1).Stack 栈内存
栈是java程序的运行区,是在线程创建时创建,它的生命周期是跟随线程的生命周期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收的问题,只要线程一结束,该栈就结束。栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法(Method)和运行期数据的数据集。栈帧遵循“先进后出”原则。栈帧中主要保存三类数据:本地变量(包括输入输出参数以及方法内的变量);栈操作(记录出栈,入栈的操作);栈帧数据(类文件,方法等)。

(2)Heap 堆内存
一个JVM实例只存在一个堆内存。堆内存是可以大小是可以调节的。堆内存中存放着对象,包括对象变量和对象方法。
堆内存分为三部分:
永久存储区:用于存放JDK自身所携带的class。也就是运行环境必须的类信息。该区域的数据不会被垃圾回收,只有关闭了JVM才会释放此区域的内存。
新生区:新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。新生区又分为伊甸区和幸存者0区,幸存者1区。
养老区:养老区用于保存从新生区筛选出来的JAVA 对象,一般池对象都在这个区域活跃。

(3)Method Area 方法区
方法区是被所有线程共享,该区域保存的所有字段和方法字节码,静态变量以及一些特殊的方法的构造函数,接口代码也才此定义。

(4)PC Register 程序计数器
每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码,由执行引擎读取下一条指令。

(5)Native Method Stack 本地方法栈

public class JVMShowcase {
//静态类常量,
public final static String ClASS_CONST = "I'm a Const";
//私有实例变量
private int instanceVar=15;
public static void main(String[] args) {
//调用静态方法
runStaticMethod();
//调用非静态方法
JVMShowcase showcase=new JVMShowcase();
showcase.runNonStaticMethod(100);
}
//常规静态方法
public static String runStaticMethod(){
return ClASS_CONST;
}
//非静态方法
public int runNonStaticMethod(int parameter){
int methodVar=this.instanceVar * parameter;
return methodVar;
}
}


下面我们来看看JVM 是如何运行的,也就是输入java JVMShowcase (类名) 后,我们来看JVM是如何处理的:
第一步:JVM向操作系统申请空余内存。

第二步:JVM分配内存
JVM得到操作系统给的内存后,首先给heap分内存,然后分配栈内存。

第三步:检查和分析class文件

第四步:加载类
由于没有指定加载器,JVM默认使用bootstrap 加载器,就把rt.jar下的所有类都加载到了堆类存的永久存储区,JVMShowcase 也被加载到内存中.此时方法区有main方法和静态方法,Heap 是空,Stack 是空,因为还没有线程被执行。Class Loader 通知Execution Enginer 已经加载完毕。

第五步:执行引擎执行main方法
执行引擎启动一个线程,开始执行main 方法,在main 执行完毕前:
方法区加入了常量,现有(main,runStaticMethod,CLASS_CONST)
堆内存中有(Object,showcase)
栈内存中有三个栈帧(runStaticMethod,runNonStaticMethod,main)
于此同时,还创建了一个程序计数器指向下一条要执行的语句。

第6步,释放内存。运行结束,JVM把内存还给操作系统。
分享到:
评论

相关推荐

    jvm简介,就是对java 虚拟机的一个概述

    jvm简介

    JVM简介以及历史.docx

    Java虚拟机(JVM)是Java技术的核心组成部分,它的出现旨在实现硬件和操作系统无关性,使得Java程序可以在任何支持JVM的平台上运行。JVM通过解释和执行字节码(bytecode),即一种与硬件无关的指令集,来实现这一...

    java基础之JVM

    #### 一、JVM简介 **1.1 JVM是什么** Java Virtual Machine (JVM),即Java虚拟机,是Java技术的核心组成部分之一。它是一种抽象计算机,能够执行Java字节码(一种中间代码)的虚拟机环境。JVM的设计目的是为了使...

    浅析JVM

    #### 一、JAVA语言及JVM简介 **JAVA语言**是由Sun Microsystems公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)等人于1995年设计并发布的。JAVA语言是一种通用型、面向对象的编程语言,支持并发编程,其...

    从 0 开始带你成为JVM实战高手【完整版】

    2. **JVM简介** - JVM(Java Virtual Machine)是Java程序的运行环境,它负责执行Java字节码。 - JVM包括类加载器、运行时数据区、执行引擎等核心组件。 - 类加载器负责将.class文件加载到内存中,并转换为可供...

    JVM DVM的区别

    #### 三、JVM简介 **JVM**是Java Virtual Machine的简称,由Oracle公司(原SUN公司)开发维护,是运行Java应用程序的基础环境。JVM的设计目标是为了提供一个跨平台的运行环境,使得Java程序可以在不同的操作系统上...

    快速入门JVM

    #### 一、JVM简介 Java虚拟机(Java Virtual Machine,简称JVM)是运行所有Java程序的基础环境。它是一个虚构的计算机,包括一个即时编译器(JIT)、垃圾回收器(GC)和类加载器等核心组件。JVM提供了一个运行时...

    初识JVM – JVM概念.pdf

    #### 一、JVM简介 JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而无需重新编译。 ##### 特点...

    JVM面试.docx

    #### 一、JVM简介 Java虚拟机(JVM, Java Virtual Machine)是一种用于执行Java字节码的虚拟机,它位于硬件与操作系统之上,提供了一个运行Java程序的安全隔离环境。JVM的主要作用是解释执行Java字节码,同时也提供...

    JVM-整体结构原理深度解析

    #### 一、JVM简介及跨平台性 ##### 1.1 JVM定义 JVM(Java Virtual Machine),即Java虚拟机,是一种用于计算设备的规范,它模拟了一个计算机环境,允许Java程序在这个虚拟环境中运行而无需针对不同平台进行重新...

    java_jvm.zip_java

    一、JVM简介 Java虚拟机(JVM)是Java运行环境的一部分,它的主要任务是执行Java字节码。字节码是一种中间语言,由Java编译器将源代码编译成,然后由JVM解析并执行。JVM的存在使得Java程序可以跨平台运行,因为它...

    java JVM的主要介绍

    这个ppt主要是介绍了java虚拟机的各种特点和好处

    JVM 入门到精通 Typora 版

    #### 一、JVM简介 - **定义**: Java虚拟机(JVM)是一个可以执行二进制字节码的软件层,它将字节码转换为特定平台上的机器指令执行。 - **特点**: - 一次编译,到处运行:Java代码被编译成字节码后,可以在任何...

    jvm中文规范简介

    ### JVM中文规范简介 #### 一、Java虚拟机(JVM)概述 ##### 1. 为什么使用Java虚拟机 Java语言的重要特性之一是其跨平台性,而这正是通过Java虚拟机(JVM)得以实现的关键所在。为了使Java程序能够在不同操作系统...

    jVM之走进类加载dsaas

    #### 一、Java及JVM简介 Java自1995年由Sun Microsystems发布以来,便迅速成为了最受欢迎的编程语言之一。根据TIOBE语言热度排行榜,Java持续保持在前列,这证明了其在编程领域的持久影响力。 **1.1 Java发展的...

    JVM学习笔记核心知识点整理

    Java与JVM简介 - **Java**: 是一门面向对象的高级编程语言,旨在实现“一次编写,到处运行”的理念。 - **JVM**: Java Virtual Machine 的缩写,是一种用于执行Java字节码的虚拟机,能够确保Java程序在不同的平台...

    JVM教程吐血整理干货.md

    #### JVM简介 Java虚拟机(JVM)是一种能够执行Java字节码的虚拟机。它为Java程序提供了一个独立于硬件平台的运行环境,使得Java程序可以在任何安装了JVM的平台上运行。JVM负责管理程序的内存分配、垃圾回收以及...

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议 视频教程+笔记+课件+资料

    - **JVM简介**:Java Virtual Machine是执行Java字节码的虚拟机。 - **JVM架构**:主要包括类加载器子系统、执行引擎、内存管理器等组件。 ##### 4.2 JVM运维实用排障工具 - **常用工具**:jstat、jmap、jstack等...

    JVM基础.doc

    #### 一、JVM概述与HotSpot简介 Java虚拟机(JVM)是Java技术的核心组成部分之一,它为Java程序提供了运行时环境。本节将详细介绍JVM的基本概念及其核心技术——HotSpot。 **HotSpot VM** 是Oracle公司提供的一个高...

Global site tag (gtag.js) - Google Analytics