04、JVM运行时几个重要内存区域

程序在运行的时候,数据具体会在JVM提供的这几个内存区域中进行数据交互。

程序运行的时候有对应的class源文件数据,代码的编译信息等需要地方存储,这个就是MethodArea(方法区/元数据区)

然后线程跑起来之后需要有存线程相关信息的地方,这个就是JVMStacks

同时也需要一个记录程序执行位置的空间,这个就是ProgramCounter

还有对于线程来说还需要一些高效率或跟底层硬件联系的类库,这些数据就存放在本地方法栈(Native Method Stacks)

程序跑的时候往往不是单个线程的,在多线程跑的时候,就需要有共享的内存,这个就是堆区(Heap)

对于追求性能的程序来说,可能还需要用到堆外内存,这部分就是直接内存区(DirectMemory)

1、MethodArea

2、JVMStacks

3、ProgramCounter

4、NativeMethodStacks

5、Heap

6、DirectMemory

  • MethodArea:存放了class的源信息,也包括了常量池中的数据

  • JVMStacks:方法栈,它是每个线程私有的,主要有如下内容

    • Local Variable Table(本地变量表)
    • Operend Stacks(操作数栈)
    • Dynamic Linking(动态链接)
    • Return Address(方法最后返回值存放地址)

    方法栈主要保证程序中的方法能正常运行而设计的,既然如此,它肯定会有用来存方法中局部变量的空间也就是Local Variable Table(本地变量表),同时数据的交换和计算需要一个栈来作为数据计算的容器,同时方法中肯定需要访问其他的非局部的变量,此时如何找到它们,就需要Dynamic Linking来处理了,最后有些方法是需要一个返回值的也就是Return Address

相关推荐
z落落2 分钟前
C# WinForm TreeView 树形控件+ListView控件+菜单栏
开发语言·c#
码云数智-园园2 分钟前
码云数智网站SEO设置指南:如何让百度搜索到你的网站
开发语言
赴生-2 分钟前
C++进阶 智能指针
开发语言·c++
潇凝子潇4 分钟前
IDEA插件
java·ide·intellij-idea
摇滚侠5 分钟前
SSM 框架实战教程 SpringBoot 自动配置 176-179
java·spring boot·后端
chao1898447 分钟前
GNSS软件接收机 MATLAB 实现(GPS L1 CA码)
开发语言·matlab
JAVA9657 分钟前
JAVA面试-JVM篇 02-G1垃圾收集器的工作原理是什么与CMS的区别
java·jvm·面试
ywl4708120879 分钟前
spring单列bean之循环依赖核心源码解读
java·后端·spring
清水白石0089 分钟前
让对象像函数一样工作:深入理解 Python `__call__` 的作用与实战场景
开发语言·python
我命由我123459 分钟前
RFID 技术极简理解
java·c语言·c++·嵌入式硬件·物联网·visualstudio·java-ee