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

JVM理论学习一

    博客分类:
  • Java
 
阅读更多

JVM介绍

JVM 是Java Virtual Machine(JVM )的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 与JDK、JRE的关系从下图可以很清晰的了解,图中蓝色部分为JVM ,从图中了解到JVM 从属于JRE 。

 java程序运行流程

首先,要编写一个Java 程序,将其保存为.java 类型文件;

然后,通过JDK bin目录下的javac 应用程序将.java 文件编译成.class 类型文件;

最后,通过JDK bin目录下的java 应用程序执行.class 文件,输出结果。

 

程序开始执行时JVM 运行,程序结束后JVM也随之停止。你在同一台机器上运行三个程序,就会有三个运行中的JVM 进程。如下图

 

 JVM 总是开始于一个main() 方法,这个方法必须是公有、返回void、直接受一个字符串数组。在程序执行时,必须给JVM 指定main() 方法所在类。

 

main() 方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。Java 中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是JVM 自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可以把自己的程序设置为守护线程,这里main() 方法的初始线程不是守护线程。

 

JVM组成

JVM是运行在操作系统之上的,它与硬件没有直接的交互。由一个"class loader subsystem"(类加载器子系统:用于加载符合JVM 规格的类型(类或接口)、"execution engine"(执行引擎:负责执行已经加载类中的方法)和"runtime data areas"(运行时数据区:用于存储运行时数据) 这三部分组成。

 

 

类装载器子系统:用来装载.class 文件的。Class Loader加载的class文件是有格式要求,需要详细了解的话,可以仔细阅读《JVM Specification》。

注意:Class Loader只管加载,只要符合文件结构就加载,至于说能不能运行,则不是它负责的,那是由Execution Engine负责的。

 

执行引擎:执行字节码或本地方法,执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。

 

Native Interface本地接口:为了调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。

 

运行时数据区(runtime data areas):我们所有写的程序都被加载到这里,之后才开始运行,Java生态系统如此的繁荣,得益于该区域的优良自治。整个JVM框架由加载器加载文件,然后执行器在内存中处理数据,需要与异构系统交互是可以通过本地接口进行。

 

 

 

PC Register 程序计数器

一块很小的内存区域,作用是当前线程所执行字节码的行号指示器。

由于Java虚拟机中的多线程是通过线程轮流切换并分配CPU执行时间来实现的,在任何一个确定的时刻,一个CPU只会执行一条线程中的指令。因此为了线程切换后可以恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,相互独立。称这类内存为“线程私有的内存”。

 

Java虚拟机栈

栈也是线程私有的,它的生命周期和线程相同,线程启动时创建。这个栈中存放一系列的栈帧,每个方法执行的时候会创建一个栈帧(用于存放局部变量表、操作栈、动态链接、方法出口等信息),压入栈中,方法执行完成会弹出栈帧,如果方法出现异常可以调用printStackTrace来查看栈的情况。

 

本地方法栈

本地方法栈和虚拟机栈作用非常相似,区别是本地方法栈。虚拟机规范中对本地方法栈没有具体的规定,因此虚拟机可以自由的实现。Sun HotSpot直接把本地方法栈和虚拟机栈合二为一。

 

Java 堆

Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。

 

由于现在的收集器基本都是分代收集算法,主要分成:新生代(Eden区、From Survivior区、To Survivor区)和年老代。如果从内存分配的角度看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer TLAB)

 

方法区

Method Area和java 堆一样,是各个线程共享的内存区域,它用户存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据。

 

直接内存

直接内存并不是虚拟机运行时数据区的一部分,但是被频繁的使用。在JDK1.4以后引入了NIO,基于Channel和Buffer的I/O方式,使用Native函数库直接分配堆外内存。显然,本机直接内存分配不会受到java堆大小的限制,会收到本机总内存的限制。所以在配置堆内存的时候,注意下物理内存和操作系统的限制。

 

  • 大小: 69 KB
  • 大小: 13 KB
  • 大小: 60.8 KB
  • 大小: 9.5 KB
分享到:
评论

相关推荐

    JVM学习资料+笔记

    这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...

    jdk,jvm源码

    个人网站可能提供了一些关于JVM源码分析的教程和资源,对于深入学习JVM的运行机制,这是一个很好的参考资料。通过结合理论知识与实际源码阅读,可以更好地掌握Java编程的精髓,提高解决复杂问题的能力。

    jvm视频及笔记

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为开发者...理论学习后,实践操作是巩固知识的关键,尝试在实际项目中应用这些知识,解决性能问题,优化JVM配置,将使你对JVM的理解更加深入。

    jvm_code深入理解.zip

    配套的源代码提供了丰富的实践机会,让理论知识与实战结合,使学习更加有效。 首先,我们要了解JVM(Java Virtual Machine)是Java平台的核心部分,它是Java程序的执行引擎,负责将字节码转化为机器码,实现跨平台...

    狂神说JVM探究.rar

    【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...

    jvm视频教程2020最新.rar

    通过这套2020年最新的JVM视频教程,学员不仅能掌握JVM的基础理论,还能提升实战技能,为解决实际工作中遇到的JVM问题提供强大的理论支持。配合源码学习,效果更佳,让学习者能够快速上手,应对各种复杂的JVM挑战。

    JVM调优视频理论及工具

    通过学习JVM调优视频理论及工具,开发者可以深入理解JVM的工作原理,从而有效地解决性能问题,提升Java应用的整体性能。同时,了解和掌握这些工具能帮助开发者更好地定位和解决问题,实现系统的稳定高效运行。

    JVM内存管理白皮书

    这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份白皮书中,将从以下几个核心方面展开介绍: 1. 显式与自动内存管理的对比 JVM提供的内存管理机制是自动的,这与其他一些编程语言需要...

    深入Java虚拟机 JVM pdf

    至于“inside JVM光盘”内容,通常会包含书中提到的源代码示例、补充材料和作者的其他资源,这将为读者提供一个实践和探索JVM的平台,加深对理论知识的理解。 总的来说,《深入Java虚拟机》是一本深度与广度兼备的...

    JVM规范与深入理解

    书中的内容不仅包括理论知识,还有丰富的实践案例,帮助读者将理论与实际相结合,提升对JVM的理解。特别是对于内存模型的讲解,如堆内存、栈内存、方法区以及本地方法栈的运作机制,这些内容对于理解Java程序的运行...

    jvm调优学习

    ### JVM调优学习知识点 #### 一、JVM堆大小设置 JVM堆大小的设置是JVM调优中的一个重要环节,它直接影响到程序运行时的性能表现。具体来说,JVM的最大堆大小受到以下几个方面的限制: 1. **操作系统的数据模型**:...

    JVM Diagnostics Guide 1.4.2

    1. **JVM概述**:介绍Java虚拟机的原理和作用,包括解释器、编译器、垃圾收集器以及类加载机制。 2. **内存模型**:详细讲解JVM内存结构,如堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈...

    jvm和gc详解及调优

    《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业书籍,对于Java开发者来说,是进阶提升的必备资料。书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能...

    JVM调优实战.doc

    《JVM调优实战》是一份深入探讨Java虚拟机(JVM)性能优化的文档,主要分为理论篇和实战篇两大部分。...通过理论学习和实战演练,开发者可以更好地理解和优化JVM,从而提升应用程序的稳定性和效率。

    JVM&g1gc;带书签,完整版本

    带书签,完整版本"的学习资料提供了深入了解JVM内存管理和G1垃圾收集器的详细内容。通过对G1的理解和实践,开发者可以更好地优化Java应用的性能,降低垃圾收集对应用运行的影响,实现更高效的内存管理。这份资料不仅...

    理论与实践结合 解密JVM-day01.rar

    《理论与实践结合:解密JVM》 ...通过学习这个资料,你将能够掌握JVM的基本概念,理解其内存模型和类加载机制,并具备初步的性能调优能力。理论与实践的结合将使你对JVM的理解更加透彻,进一步提升你的Java开发技能。

    从 0 开始带你成为JVM实战高手.txt

    从零开始学习并掌握Java虚拟机(JVM)...通过以上几个方面的详细介绍,我们可以看到JVM的学习不仅涉及到理论知识的理解,更重要的是能够结合实际场景进行实践操作。希望本文能帮助你从0开始逐步成长为一名JVM实战高手。

    JVM系列之性能调优参考手册(实践篇).pdf

    1. 标准参数:以“-”开头,如“-server”、“-client”,这些参数在所有JVM实现中都是一致的,用于设置JVM的运行模式等基础功能。标准参数还包括用于查看版本、设置classpath路径、打印相关信息等。 2. 非标准参数...

Global site tag (gtag.js) - Google Analytics