文档章节

JVM-运行时内存布局

王黎明1224
 王黎明1224
发布于 2017/08/04 17:52
字数 720
阅读 21
收藏 0

JVM-运行时内存布局

             

  1. pc registers(Program Counter Register)程序计数器,程序计数器作用是指示下一条指令应该执行什么。javac会将java代码编译成一系列字节码,每条指令用一个字节来储存这样就形成了一个指令数组。程序计数器的作用就是告诉字节码执行引擎当前执行到那一条指令了,下一条该执行什么,就好比汇编语言中的cs/ip 寄存器的作用是一样的就是告诉处理器执行的下一条指令在哪。
  2. java stacks(java virtual machine stacks)java虚拟机栈,了解过操作系统的都应该知道程序执行可以离开堆,但是离不开栈无论是汇编还是高层语言在函数调用传递参数的时候都是依赖栈完成的。java也不例外java程序在启动的时候创建主线程紧接着会创建一个“java虚拟机栈”,然后主线程执行main函数开始向“java虚拟机栈”中压如栈帧,main函数中调用了各种各样的方法其执行过程就是 :
         1.main函数调用A();
         2.会向“java虚拟机栈”中压入一个栈帧(包含一些参数返回地址等)
         3.然后跳转到A方法开始执行A方法的代码。
         4.A方法再其内部调用了A1();
         5.那么会继续向“java虚拟机栈”中压入一个栈帧。
         6.当A1执行完了程序会返回A方法并弹出“java虚拟机栈”栈顶元素
    此时“java虚拟机栈”的栈顶储存的是A方法运行时所需的数据以此类推,调用方法就是压栈,跳转到相应代码执行执行完返回到原方法并弹出栈顶元素。
  3. native method stacks,本地方法栈其作用于java虚拟机栈一样,区别就是给native方法使用的栈。
    以上三种都是每个线程自己私有的
  4. heap,堆是程序中占用内存最大的区域。同时也是所有线程共享的,其作用就是存储程序运行时创建的对象实例。堆在java中一般会被划分成很多个区域,程序将实例分类按照奇特的存放在不同的区域中。
  5. method area ,方法区是用来存储类信息、常量、静态变量等数据。值得注意的是“运行时常量池” 也是方法区的一部分“运行时常量池”用于存储程序运行期间产生的常量比如字符串。
    以上三种(包括运行时常量池)都是所有线程自己共享的

以上是jvm运行时内存布局,及其每一部分的作用。

 

© 著作权归作者所有

上一篇: Java Nio
王黎明1224
粉丝 2
博文 9
码字总数 12429
作品 0
朝阳
程序员
私信 提问
从 Java 代码到 Java 堆

从 Java 代码到 Java 堆 分析是一种美德,PS原文地址:http://www.ibm.com/developerworks/cn/java/j-codetoheap/ 理解和优化您的应用程序的内存使用 本文将为您提供 Java™ 代码内存使用情况...

北极之北
2016/03/10
763
3
虚拟机学习之一:java内存区域与内存溢出异常

1.运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途和创建、销毁时间,有的区域伴随虚拟机进程的启动而存在,有些区...

贾峰uk
2018/10/21
45
1
深入理解jvm虚拟机读书笔记-Java内存区域与内存溢出异常

1. 运行时数据区 如图: 1.1 程序计数器 程序计数器是是线程隔离的区域,每个线程都有一个独立的程序计数器。 它是一块较小的内存空间,字节码解释器通过改变计数器来选取下一条要执行的字节...

eko1995
2018/08/18
0
0
JVM学习之——Java内存区域

为了加深对Java语言的理解,加深对Java虚拟机工作机制、底层特性的了解和掌握,准备在闲暇时间,抽空对《深入理解Java虚拟机 JVM高级特性与最佳实践》一书进行学习。本文是学习此书第2章时的...

你想要怎样的未来
2018/05/27
0
0
Java运行时内存种类划分详细解析

背景: 听说Java运行时环境的内存划分是挺进BAT的必经之路。 内存划分: Java程序内存的划分是交由JVM执行的,而不像C语言那样需要程序员自己买单(C语言需要程序员为每一个new操作去配对del...

金铭鼎IT教育
01/14
47
0

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
28分钟前
3
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
30分钟前
2
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
34分钟前
2
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
38分钟前
2
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部