JVM,全称Java Virtual Machine,即Java虚拟机。我们以Java作为编程语言所编写的应用程序都是运行在这上面的。JVM对程序的执行主要分为两个步骤,第一步是编译,即将.java的源文件编译成为.class的字节码文件,第二步是解释,JVM对字节码文件进行解释执行。
更进一步的研究,我们会发现,JVM整个大系统又分为两个子系统,第一个是ClassLoader,即类加载器,功能则是将我们编写的类加载到JVM当中来。我们可以继承ClassLoader这个类来实现我们自己的类加载器,至于具体如何让JVM使用我们的自定义ClassLoader还有待研究;第二个是Execution Engine,即执行引擎,负责对编译后的字节码文件进行解释执行。而Execution Engine又分为两部份,第一部份是Runtime data area,即运行时数据区域,这就相当于JVM中的内存,而第二部份则是Native interface,即本地化接口,主要用于执行其他非java编程语言编写的程序。这里面的重点就是Runtime data area。RDA又分为五个部分,分别是Method area 方法区域,Java stack Java栈,Heap 堆,Program counter 程序计数器,Native method stack 本地方法栈。
堆又分为三个部份,第一部份是Young年轻代,第二部份是Tenured年老代,第三部份是Perm持久代。年轻代又分为Eden,Survivor I,Survivor II三个部份。现在来看看JVM的构图吧。
现在再来详细了解一下Runtime data area中的各个组成部份。
1.Java stack
Java栈是一个内存块,一个数据集,遵循先进后出的原则。如当A方法被调用时,A被压入栈,而A方法中又调用了B方法,B方法被压入栈,执行完毕时,B方法先出栈,然后才是A方法出栈。栈中存放的数据主要是本地变量,即输入输出参数,形式参数。栈中的数据被应用程序的每一个线程所拥有,当线程结束,那么栈中的数据也就消失了。所以不存在垃圾回收的问题。
2.Heap
对象的实例就存放在堆中。因为堆中的数据是被应用程序的所有线程所共享的,所以可能会引发同步问题,这是需要我们考虑的,而且Java中的GC就是针对堆中的数据进行垃圾回收处理的。来看看堆的结构吧。
- 大小: 50.8 KB
- 大小: 39.1 KB
分享到:
相关推荐
对Java中JVM和JMM中技术根据手绘图来详细的展示。加深理解,让自己一次性解决JVM,吊打面试官是我们的目的。
### 浅析JVM:垃圾回收与内存模型 #### 一、JAVA语言及JVM简介 **JAVA语言**是由Sun Microsystems公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)等人于1995年设计并发布的。JAVA语言是一种通用型、面向...
在使用Eclipse集成开发环境时,有时会遇到“Incompatible JVM”(不兼容的Java虚拟机)的问题,导致无法正常启动。这个问题通常是由于Eclipse所依赖的Java版本与系统当前配置的JVM版本不匹配造成的。本文将深入解析...
JVM 逃逸的原理及分析 JVM 逃逸是 Java 虚拟机(JVM)中的一种优化技术,用于减少 Java 程序中的同步负载和内存堆分配压力。逃逸分析是 JVM 中的一种跨函数全局数据流分析算法,能够分析出一个新的对象的引用的使用...
Java虚拟机(JVM)的垃圾回收(Garbage Collection, GC)是自动管理内存的一种机制,旨在自动识别并释放不再使用的对象,以防止内存泄漏。本文将深入探讨JVM垃圾回收的基本过程,主要包括三个关键步骤:枚举根节点、...
在深入探讨JVM字段访问优化之前,我们先理解一下逃逸分析。逃逸分析是JVM优化技术的一部分,主要是为了判断一个对象是否会被外部访问,从而决定是否可以进行某些优化,比如栈上分配、标量替换等。在给定的例子中,...
那JVM的内存结构到底是如何呢?JVM做为一个运行在操作系统上,但又独立于os运行的平台,它的内存至少应该包括象寄存器、堆栈等区域。 JVM在运行时将数据划分为了6个区域来存储,而不仅仅是大家熟知的Heap区域,...
Java程序在JVM(Java Virtual Machine,Java虚拟机)上运行,JVM作为一个平台无关的执行环境,负责Java程序的内存管理和执行。理解Java内存分配原理有助于优化程序性能,避免内存泄露等问题。 在JVM中,内存主要...
### Netty实现原理浅析 #### 一、总体结构概览 Netty是一个高性能的Java NIO框架,由JBoss出品。它不仅提供了一套完整的客户端和服务端开发工具集,而且具备高度可定制化的特点,使得开发者能够轻松构建出可靠且...
Java技术浅析 Java是一种广泛应用于企业级项目开发的编程语言,它具有强大的功能和灵活的特性,使其成为开发大型项目的首选语言。Java技术浅析主要介绍了Java语言的技术关键词、编程技术框架、原理等知识点。 一、...
### Class文件结构浅析 #### 一、引言 在深入了解Class文件的结构之前,我们需要明确Class文件在Java生态系统中的重要地位。Java程序被编译器编译后生成的`.class`文件,实际上是字节码文件,它们是Java虚拟机...
Java虚拟机(JVM)负责执行垃圾回收,但其工作原理对于优化程序性能至关重要。 1、`finalize()`方法: `finalize()`方法是Java中的一个特殊方法,由`Object`类定义,但并不直接与垃圾回收有关。当对象不再被引用时...
【浅析J2EE应用服务器的JAVA类装载器】 Java类装载器机制是Java语言灵活性的关键组成部分,尤其在J2EE应用服务器中扮演着重要角色。理解这一机制有助于开发者更好地部署和管理应用程序,解决可能出现的部署问题。 ...
这篇博客“浅析OSGI的bundle依赖”可能探讨了如何管理和解决这些模块间的依赖问题。 首先,我们来看一下OSGI中的bundle生命周期。一个bundle可以处于未安装、已安装、启动、暂停、停止或卸载这六种状态之一。当...
这篇压缩包内的文件《浅析Java Applet技术在网络管理中的研究及应用》很可能详细探讨了Java Applet如何在互联网环境中帮助进行网络管理和优化。尽管Applet技术在现代Web开发中已逐渐被其他技术取代,但在其鼎盛时期...
JVM(Java虚拟机)为每一个运行中的Java应用程序提供了一个唯一的运行环境。JVM的内存主要被划分为三个区域:堆区、栈区和方法区。堆区(Heap)是存放通过new关键字创建的对象实体的地方,这些对象实体在堆中拥有...
Java类加载原理是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从磁盘或网络中加载到内存,并转化为运行时的数据结构,以便执行程序代码。本文将深入探讨类加载机制,包括加载、连接、初始化三个主要...
当我们通过`java 类名`命令运行一个Java程序时,JVM(Java Virtual Machine)会查找包含`main()`方法的`public`类,并执行其中的`main()`方法。由于`main()`是静态的,所以无需实例化类对象,JVM可以直接调用它。 ...