主要包括两个子系统和两个组件:
Class loader(类装载器) 子系统,
Execution engine(执行引擎) 子系统;
Runtime data area (运行时数据区域)组件,
Native interface(本地接口)组件。
Class loader子系统的作用 :
根据给定的全限定名类名(如 java.lang.Object)来装载class文件的内容到 Runtime data area中的method area(方法区域)。
Java程序员可以extends java.lang.ClassLoader类来写自己的Class loader。
Execution engine子系统的作用 :
执行classes中的指令。任何JVM specification实现(JDK)的核心是Execution engine, 换句话说:Sun 的JDK 和IBM的JDK好坏主要取决于他们各自实现的Execution engine的好坏。每个运行中的线程都有一个Execution engine的实例。
Native interface组件 :与native libraries交互,是其它编程语言交互的接口。
Runtime data area 组件:这个组件就是JVM中的内存。
Runtime data area 主要包括五个部分:
Heap (堆),
Method Area(方法区域),
Java Stack(java的栈),
Program Counter(程序计数器),
Native method stack(本地方法栈)。
Heap 和Method Area是被所有线程的共享使用的;
而Java stack, Program counter 和Native method stack是以线程为粒度的,每个线程独自拥有。
Heap
Java程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java虚拟实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个java程序独占一个JVM实例,因而每个java程序都有它自己的堆空间,它们不会彼此干扰。但是同一java程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对象(堆数据)的同步问题。 (这里可能出现的异常java.lang.OutOfMemoryError: Java heap space)
Method area
在Java虚拟机中,被装载的class的信息存储在Method area的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内容并把它传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。与Heap 一样,method area是多线程共享的,因此要考虑多线程访问的同步问题。比如,假设同时两个线程都企图访问一个名为Lava的类,而这个类还没有内装载入虚拟机,那么,这时应该只有一个线程去装载它,而另一个线程则只能等待。 (这里可能出现的异常java.lang.OutOfMemoryError: PermGen full)
Java stack
Java stack以帧为单位保存线程的运行状态。虚拟机只会直接对Java stack执行两种操作:以帧为单位的压栈或出栈。每当线程调用一个方法的时候,就对当前状态作为一个帧保存到java stack中(压栈);当一个方法调用返回时,从java stack弹出一个帧(出栈)。栈的大小是有一定的限制,这个可能出现StackOverFlow问题。
Program counter
每个运行中的Java程序,每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向下一条将被执行指令的地址;,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。
Native method stack
对于一个运行中的Java程序而言,它还能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,不止与此,它还可以做任何它想做的事情。比如,可以调用寄存器,或在操作系统中分配内存等。总之,本地方法具有和JVM相同的能力和权限。 (这里出现JVM无法控制的内存溢出问题native heap OutOfMemory )
相关推荐
TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师JVM架构师课程笔记TL学院诸葛老师...
Java字节码是Java源代码编译后的中间表示,它不依赖于任何特定的计算机架构,可以在任何实现了JVM的平台上运行。反编译Java字节码可以揭示其内部工作原理,帮助开发者了解库函数的具体实现,尤其是在没有源代码的...
Java虚拟机(JVM)具有一个独特的架构,它包括以下几个关键组件: ##### 寄存器 JVM使用一组寄存器来存储操作数和结果。每个线程都有自己的寄存器集合,这样可以确保多线程之间的隔离性。 ##### 内存区域 JVM...
Java互联网架构师是一个涵盖广泛领域的专业角色,这个角色需要深入理解软件开发的各个方面,特别是针对大规模、高并发的互联网应用。本课程集成了多种关键知识点,旨在帮助在职Java工程师提升技能,迈向架构师之路。...
1. **JVM架构**:JVM主要由类装载器、运行时数据区、执行引擎、本地方法接口和本地库组成。每个部分都有其特定的功能,共同确保Java程序的正常运行。 2. **类装载器**:负责加载类文件到JVM中,包括引导类装载器、...
同时,会探讨Java平台在分布式环境中的优势,如JVM的跨平台性、丰富的库支持等。 二、分布式服务框架 这一章节将深入讲解Spring Cloud和Dubbo这两个主流的Java分布式服务框架。Spring Cloud提供了一整套微服务解决...
通过上述分析可以看出,JVM架构复杂而精密,各个组成部分相互协作,共同完成Java程序的运行任务。理解这些基本概念对于深入学习Java编程技术至关重要。希望本文能帮助读者对JVM有一个更加清晰的认识。
通过对Java虚拟机JVM的基本概念、架构以及内存管理机制的深入解析,我们可以更好地理解Java程序的执行过程。掌握JVM的工作原理有助于开发者编写更高效、更稳定的Java应用程序,并能有效地解决常见的内存溢出问题。
这份"JAVA架构师知识整理.zip"压缩包包含了由by2kc编纂的资料,主要涵盖了JVM(Java虚拟机)、微服务、架构设计等多个关键知识点。 首先,JVM是Java语言的核心组成部分,它负责解释和执行Java代码。理解JVM的工作...
Java互联网架构师系统进阶课程 目录1.并发编程2.Spring3.mybaits4.Jvm与性能调优5.tomcat6.MySQL7.Nginx8.netty9.分布式思维10.zookeeper11.架构核心服务层技术基础篇12.Dubbo 全解析
### IBM Java JVM Diagnostic Guide ...通过以上内容的学习,读者不仅能够深入了解IBM JVM的内部架构,还能掌握如何有效地利用IBM提供的各种工具来诊断和解决问题,从而提高工作效率并提升应用程序性能。
只有含有`main()`方法的类才能被Java虚拟机(JVM)直接执行,通过命令行`java MainClassName`来运行程序。 Java严格区分大小写,`System`和`system`,`String`和`sstring`是完全不同的标识符。标识符用于命名变量、...
### JVM架构 JVM主要由以下几个组件构成: 1. **类装载器(ClassLoader)**:负责查找和加载类文件到JVM内存中。 2. **运行时数据区(Runtime Data Area)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。...
JVM 体系架构是 JavaVirtual Machine(Java虚拟机)的核心组件之一,它主要负责管理 Java 程序的内存模型。本文将详细介绍 JVM 体系架构的组件、内存模型、运行时数据区、垃圾收集机制等关键知识点。 一、JVM 体系...
为了深入理解这一技术,开发者需要深入学习Java虚拟机(JVM)规范和Java语言规范。这两者是Java平台的技术基石,对于每一个Java开发者来说,都是必须要掌握的核心知识。 Java语言规范(JLS)是Java编程语言的官方...
《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...
标题 "框架->java语言->jvm->os->汇编->硬件" 描述了一条技术学习路径,从上至下深入理解软件开发的核心技术栈。这个路径涵盖了从应用框架到底层硬件的关键环节,让我们逐步解析其中涉及的知识点: 1. **框架**:...
然而,想要在高并发和高性能场景中充分发挥Java的优势,开发者需要对支撑Java程序运行的虚拟机——Java虚拟机(JVM)有深入的理解。《深入理解Java虚拟机JVM高级特性与最佳实践》一书,正是为解决这一需求而生。 ...
Java技术架构图汇总文档对Java技术的架构图进行了系统的总结和归纳,涵盖了多种Java技术架构,包括JVM架构、Spring架构、Hibernate架构、Struts2架构、Struts1架构、J2EE架构、SmartClient架构、Ajax框架架构、...
JAVA互联网架构师 32.12GB,517个视频。包含netty,zookeeper,dubbo,redis,JVM等等,包括视频、文档和资料等等