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

[(转)]JVM运行时是什么样子?

 
阅读更多

Java是在JVM上运行的,那么JVM运行时是什么样子?

对于JVM运行时的数据区的理解用一个图来显示很形象,下面的图显示JVM运行时的数据区。

 

JVM runtime data area

每个线程的数据区

从图中可以看出,每个线程有program counter register(程序计数器),JVM Stack(JVM栈),和Native Method Stack(本地方法栈)。这三个区域都是基于每一个线程的,当一个线程创建的时候生成。

程序计数器: 每一条JVM线程都有自己的PC寄存器,用来控制线程的执行。
 JVM Stack(JVM栈): Stack里存放的是Frame(帧)(如下图所示)。 

Native Method Stack(本地方法栈): 用来支持native methods (非Java语言method)。 

所有的线程共享数据区

所有的线程共享数据区有Heap和Method Area.

Heap(堆)是与我们平时编程最直接打交道的区域。它存放所有的对象和数组。在JVM启动时划分生成。常说的Garbage Collector垃圾回收器就是对这个区域工作的。 

Method Area(方法区)存储类的结构信息,包括 run-time constant pool, field and method data, 和methods and constructors代码。 Runtime Constant Pool(运行时常量池)存放编译时可知的数值字面量和运行期解析后才能获得的method或field的引用。

JVM Stack

Stack中的包含一些Frame, 这些Frame在method调动的时候生成。每一个Frame包括:local variable array, Operand Stack, Reference to Constant Pool.

 

分享到:
评论

相关推荐

    JAVA核心面试知识点整理

    新生代是JVM运行时内存的主要部分,用于存储新创建的对象。新生代可以分为三个部分:Eden区、ServivorFrom区和ServivorTo区。 2.3.1.1 Eden区 Eden区是新生代的主要部分,用于存储新创建的对象。 2.3.1.2 ...

    Java培训笔试题

    通过JVM,Java程序可以在不同的操作系统上运行而无需修改源代码,实现了“一次编写,到处运行”的理念。 ### 安装JDK的过程 安装Java开发工具包(JDK)通常涉及以下几个步骤: 1. **下载**:从Oracle官方网站或...

    jdk的安装图示

    它包含了Java编译器、Java虚拟机(JVM)、类库以及各种开发工具,如Java调试器(JDB)、Java文档生成器(Javadoc)等。JDK的安装是Java编程的第一步,下面将详细介绍JDK的安装过程。 ### 1. 下载JDK 首先,你需要...

    125条常见的java面试笔试题大汇总

    11. **EJB(Enterprise JavaBeans)**:EJB是Java EE中用于构建企业级应用的组件模型,基于JVM运行。SessionBean主要处理业务逻辑,分为无状态(Stateless)和有状态(Stateful)两种。无状态SessionBean不保留会话...

    DJ JavaDecompiler v2.9.9.61

    字节码是一种平台无关的中间语言,可以在任何支持Java虚拟机(JVM)的设备上运行。然而,由于字节码是二进制格式,直接阅读并不直观。这时,Java反编译工具就派上了用场,它们可以将字节码还原成接近原始的Java源...

    反编译工具

    JD-GUI显示的源代码虽然可能无法完全恢复到原始开发时的样子,但对于大多数情况,它已经足够清晰地展示代码逻辑。 使用jd-gui的具体步骤如下: 1. 下载jd-gui.exe文件,这是JD-GUI的可执行程序。 2. 运行jd-gui....

    java class文件反编译工具

    这个过程允许用户浏览类的方法、字段和整体结构,就像它们最初被编写为源代码时的样子。 jad.exe是JAD(Java反汇编器)的执行文件,它是一个强大的命令行工具,专门用于将Java字节码反编译为源代码。JAD具有高级的...

    JAVA高级软件工程师培训笔记

    - **JVM的作用**:JVM是Java程序运行的基础,它负责解释执行字节码,同时提供了内存管理、垃圾回收等功能,确保程序的稳定运行。 #### 五、类的加载与执行 类加载器负责将字节码文件加载到内存中,JVM则负责执行...

    ANButton动态按钮Java小程序.zip_java小程序

    例如,按钮的文本、颜色、大小、图片或者可见性可能会在运行时发生变化。 在Java小程序中,`ANButton.java`文件很可能是这个程序的主要源代码文件,包含了对动态按钮功能的实现。Java源代码首先需要被编译成`.class...

    本人收集的很全面的java面试题

    当程序运行时发生错误,Java会抛出一个异常对象。`try`块用于包含可能引发异常的代码,`catch`块用于捕获并处理异常,而`finally`块则确保无论是否发生异常,某些代码(如资源清理)都会被执行。`throw`关键字用于...

    最终还原

    6. **数据库事务管理**: 如果"最终还原"与数据库操作相关,那么可能是指事务的回滚操作,即当事务中发生错误时,将数据库状态恢复到事务开始前的样子。 7. **设计模式**: "最终还原"也可能与软件设计模式中的某些...

    JAVA泛型的继承和实现、擦除原理解析

    例如,当一个泛型父类的方法返回一个泛型类型的对象,子类如果覆盖这个方法并返回一个不同类型的对象,虽然编译可以通过,但在运行时可能会导致错误。 总的来说,Java泛型的继承、实现和擦除原理是理解Java泛型机制...

    jemter配置文档

    可以添加一个“集合点”,右键点击 step1---->定时器---->Synchronizing Timer,这样子就添加了一个“集合点”,如果发现集合点的位置不对,可发随需要插入到相应位置。 7. 关联 可以使用正则表达式提取器或 xpath...

    logback-logdna:用于将日志传送到 LogDNA 的 Logback 附加程序

    欢迎您运行自己的 fork,但是还有另一个类似的库正在维护中。 我没用过。 如果其他人想采用这个库,请不要犹豫询问。 结束通知。用于 Logback 的 LogDNA Appender LogDNA 是托管日志记录平台: ://logdna.com 这个...

    Java经典入门教程pdf完整版

    3.1:什么是软件的运行平台 如同我们需要阳光、空气、水和食物才能正常存活一样,软件最终要能够运行,也需要 系列旳外部环境,来为软件的运行提供支持,而提供这些支持的就是运行平台。 3.2:Java是一种运行平台 Java本身...

    ZhangZhenHang01

    6. **异常处理**:Java提供了异常处理机制,如try-catch-finally语句块,用于捕获和处理程序运行时可能出现的错误。 7. **集合框架**:Java集合框架包括List、Set、Map等接口和ArrayList、LinkedList、HashSet、...

    hello-world-java:这只是一个简单的 hello world java 类

    当运行Java程序时,JVM(Java虚拟机)会寻找包含`main`方法的类,并从那里开始执行。在这个例子中,当你运行`HelloWorld`类,你会在终端或命令行窗口看到"你好,世界!"的输出。 "标签"为"Java",意味着这个项目...

    java代码-99乘法表

    2. **运行步骤**:为了运行Java程序,用户需要知道如何使用编译器(如`javac`)将源代码编译为字节码(`.class`文件),然后使用Java虚拟机(JVM)运行生成的字节码。`java Main`命令通常用于运行主类为`Main`的程序...

    java-almanac:一些Java史学

    它的设计目标是创建一种“一次编写,到处运行”的平台无关性语言,确保代码可以在任何支持Java虚拟机(JVM)的设备上运行。随着Java的发布,它迅速成为企业级应用开发的首选语言,尤其是因为其安全特性和跨平台能力...

Global site tag (gtag.js) - Google Analytics