java虚拟机所管理的内存分为以下几个数据区域:
方法区(method area)
虚拟机栈(VM Stack)
本地方法栈(Native Method Stack)
堆区(Heap)
程序计数器(Program Counter Register)
程序计数器:
是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
分支、循坏、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
线程切换后能恢复到正确的执行位置,是因为每条线程都有一个独立的程序计数器,且各条线程之间的计数器互相不影响。
如果线程正在执行一个java方法,计数器则记录正在执行的虚拟机字节码指令的地址。
如果正在执行的是Native方法,这个计数器值为空(Undefined)
这个内存区域是惟一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
虚拟机栈:
虚拟机栈也是属于线程私有,生命周期和线程相同。它描述的是java方法执行的内存模型;
每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
虚拟机栈中有一局部变量表,存放编译期可知的各种基本数据类型。其中64位长度的long和double类型的数据会占用两个局部变量空间,其余的只占一个。
局部变量表所需要的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是确定的,且方法运行期间不会改变局部变量大小。
这个区域有两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,当扩展到无法申请到足够的内存时会抛OutOfMemoryError异常。
本地方法栈:
它和虚拟机栈发挥的作用是非常类似的,只是它服务于虚拟机使用到的Native方法,而虚拟机栈则为虚拟机执行的java方法服务。
分享到:
相关推荐
Tomcat JVM 虚拟机内存设置 在讨论 Tomcat JVM 虚拟机内存设置前,需要了解 Tomcat 的运行机制。Tomcat 本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个 Java 虚拟机。用户可以选择自己的操作...
### 如何配置Tomcat的JVM虚拟机内存大小:深入解析与最佳实践 #### 引言 在IT领域,特别是Web应用服务器管理中,正确配置Java虚拟机(JVM)的内存大小对于确保应用程序的稳定性和性能至关重要。本文将详细探讨如何...
### Java虚拟机(JVM)内存设置与调优详解 #### 引言 在现代软件开发中,Java虚拟机(JVM)作为执行Java字节码的核心组件,其性能直接影响到Java应用的运行效率与稳定性。特别是在大数据处理场景下,合理设置JVM内存...
标题提到的“深入理解JVM虚拟机”,意味着要对JVM的内部机制进行深入的研究和理解。其核心知识点涵盖了如下几个方面: 1. JVM架构组成:JVM主要由类加载器(Class Loader)、运行时数据区(Runtime Data Area)、...
《JVM虚拟机深度讲解》这本书是JAVA开发者深入理解JVM的重要参考资料,它全面而详尽地探讨了Java虚拟机的工作原理与优化技巧。通过阅读本书,开发者可以大幅提升对JVM的理解,从而在编程实践中更好地驾驭这个强大的...
2. 设置 JVM虚拟机大小的必要性:Tomcat 无法直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个 Java 虚拟机。因此,需要设置 JVM 虚拟机的大小来满足应用程序的需求。 3. 设置 JVM 虚拟机大小的方法:...
JVM虚拟机规范是Java程序运行的基础,它定义了JVM如何执行字节码以及内存管理的规则。其主要内容包括: 1. **类加载子系统**:描述了如何加载、验证、准备、解析和初始化类。 2. **运行时数据区**:包括堆、方法区...
《深入理解JVM虚拟机:从基础到实践》 JVM(Java Virtual Machine)是Java程序的核心组成部分,它为Java程序提供了跨平台的运行环境。本资料集合包含了多个关于JVM学习的重要主题,旨在帮助读者从基础到深入地掌握...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。...
JVM虚拟机面试知识点解析 本文主要针对JVM虚拟机面试中的常见问题进行解析,涵盖了JVM的基础知识、JVM的结构组成、类加载器的工作原理等方面的知识点。 Java如何实现跨平台 Java能够实现跨平台是因为Java虚拟机...
Java JVM 虚拟机选项 Xms Xmx PermSize MaxPermSize 是 Java 虚拟机(JVM)中用于配置内存管理的参数。这些参数控制着 JVM 中的堆内存和非堆内存的分配。 Xms:指定 JVM 初始分配的堆内存。默认值是物理内存的 1/64...
在JVM中,内存主要分为五个区域:程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8之后被元空间取代)。程序计数器记录当前线程执行的指令位置;虚拟机栈和本地方法栈分别用于存储Java方法和Native方法的...
Java高级面试中,JVM(Java Virtual Machine)虚拟机是一个重要的知识点,它是Java程序运行的基础。JVM有多种实现,其中OpenJDK和Sun JDK是最常见的。OpenJDK是JDK的开源版本,遵循GPL V2协议,允许商业使用,但不...
本项目主要关注如何使用Sigar库在Java环境下获取系统信息,特别是内存、磁盘和JVM虚拟机的相关数据。 一、获取系统内存信息 在Java中使用Sigar库获取系统内存信息,主要涉及以下几个方面: 1. **总内存**:通过`...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java的“一次编译,到处运行”的特性得益于JVM的存在。JVM是一个软件,它在不同的操作系统上都有相应的版本,如Windows、...
### JVM虚拟机基础概念 Java虚拟机(JVM)是运行Java程序的一种环境,它为Java应用程序提供了一个独立于硬件的抽象计算机模型。通过JVM,开发者可以将编写的Java程序部署在各种不同的操作系统上而无需修改源代码,...
JVM虚拟机分享,包括虚拟机发展、内存模型及垃圾回收机制介绍