zoukankan      html  css  js  c++  java
  • 深入理解JVM内存模型

    一、 Java程序执行过程

    1. Java源码由Java编译器编译成Java字节码文件.class
    2. 由JVM类加载器加载各个字节码文件到运行时数据区
    3. 交给JVM执行引擎执行
    4. 用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间叫运行时数据区,也称JVM内存(分配和回收内存空间就是在这里)

    二、运行时数据区

    五个部分:Java栈、本地方法栈、堆、程序计数器和方法区

    1. Java栈

           也就是常说的虚拟机栈,是线程私有的,虚拟机栈描述的是Java方法执行的内存模型:每个方法执行时,

    都会创建一个栈帧(每一个方法从调用到执行完成,就对应一个栈帧在虚拟机栈中的入栈和出栈的过程),包含如下几部分:

    • 局部变量表:存放当前线程调用方法的局部变量(数据或引用)
    • 操作数栈:存放操作数
    • 指向运行时常量的引用:存放运行时常量引用
    • 方法出口

    2. 本地方法栈

    本地方法栈与Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行Native

    方法服务的。

    Native方法指的就是Java程序调用了非Java代码,算是一种引入其它语言程序的接口。

    3. 堆

    存储对象和数组,堆唯一。JDK7以后,常量池从方法区里移到了堆中。(下一篇介绍String常量池)

    4. 程序计数器

    也称PC寄存器。保存程序当前执行指令的地址,CPU得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址。

    每条线程都有一个独立的程序计数器。

    5. 方法区

    方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

  • 相关阅读:
    mysql关联查询
    MySQL数据库面试题(转发来自https://thinkwon.blog.csdn.net/article/details/104778621)
    iview + vue + thinphp5.1 源码
    <!--标签嵌套规则-->
    PHP的基本变量检测方法
    PHP的八种变量
    php变量命名规范
    C++11新特性-常用
    算法设计-DP常见问题及解题技巧
    Web开发-概述
  • 原文地址:https://www.cnblogs.com/yumingxing/p/9428658.html
Copyright © 2011-2022 走看看