java之JVM的位置和体系结构

简介: java之JVM的位置和体系结构

JVM的概念:

JVM 即 Java Virtual Machine,中文名为 Java虚拟机,一般情况下,对于C/C++ 程序,编译成二进制文件后,就可以直接执行了,但Java 需要使用 javac 编译成 .class 文件,还需要使用 Java 命令去主动执行它。JVM 就是识别 .class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数


JVM的位置:

java程序需要在jre这个特定的环境上运行,而jre包含jvm,但jvm并不是java语言编写的,它是由C/C++开发的。

JVM体系结构 :

运行时数据区:类加载完成后进入运行时数据区[RuntimeData area],运行时异常是不可捕获的,这是在类加载器后的产物.
运行时数据区里面就有(方法区(Method Area),java栈(stack),本地方法栈(native Method Stack),堆(heap) ,程序计数器(pc))

为什么这里的栈,本地方法栈,程序计数器是不会有垃圾回收的?

原因如下:

Java运行时内存区有Java堆,方法区,程序计数器,虚拟机栈,本地方法栈这五个地方,其中程序计数器,虚拟机栈和本地方法栈这三个地方随线程而生,随线程而灭,所以不需要考虑垃圾回收而Java堆和方法区会伴随着整个JVM的生命周期,所以有必要及时清理掉没有的垃圾


java虚拟机运行时数据区包含的名词解释:

方法区:

方法区存储虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据;是jvm规范中的一部分,并不是实际的实现, 当方法区无法满足内存分配需求时,将抛出OutOfMemoryError(OOM)异常。


Java堆:

仅有一个堆,Java堆用于存放new出来的对象的内容,是垃圾收集器管理的主要区域,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出 OutOfMemoryError 异常。


Java虚拟机栈:

存放的东西:八大基本类型 + new出来的对象引用地址 + 实例方法的引用地址,每一条java虚拟机线程都有自己私有的java虚拟机栈,这个栈和线程同时创建,用于存储栈帧Java虚拟机栈是Java方法执行的内存模型,每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程


栈帧(Stack Frame):存储局部变量表,操作数栈,动态链接,方法出口等信息,随着方法的调用而创建,随着方法的结束而销毁。


在Java虚拟机规范中,对这个区域规定了两种异常状况

1:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError  异常
2:如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemoryError异常。
本地方法栈:

本地方法栈和虚拟机栈非常相似,不同的是虚拟机栈服务的是[Java方法],而本地方法栈服务的是[Native方法]

程序计数器:
1:java虚拟机可以支持多个线程同时运行,每个java虚拟机线程都有自己的程序计数器(PC寄存器)
2:在任一时刻,一个java虚拟机的线程,只会执行一个方法的代码,程序计数器记录[当前线程所执行的Java字节码的地址]
3:当执行的是Native方法时,程序计数器为空,程序计数器是JVM规范中唯一一个没有规定会导致OutOfMemory的区域。
相关文章
|
2月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
56 0
|
11天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
63 1
|
2月前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
130 1
|
2月前
|
监控 Java 开发者
Java虚拟机(JVM)深度优化指南####
本文深入探讨了Java虚拟机(JVM)的工作原理及其性能优化策略,旨在帮助开发者通过理解JVM的内部机制来提升Java应用的运行效率。不同于传统的技术教程,本文采用案例分析与实战技巧相结合的方式,为读者揭示JVM调优的艺术。 ####
71 8
|
3月前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
78 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
3月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
53 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))