JVM内存结构总结

阅读: 评论:0

JVM内存结构总结

JVM内存结构总结

JVM内存结构总结归纳

本文将着重介绍JVM的内存结构,总结其特点。这也是作者学习过程中的总结归纳,如有错误欢迎指正。
我们先从下图了解JVM,即Java虚拟机。

JVM内存结构,也叫作运行时数据区,是我们最关心的区域。

程序计数器

Java是支持多线程的,且线程的执行是抢占式调度模型,即各个线程抢夺CPU时间片。为了满足线程切换后能恢复到正确的执行位置,每个线程就有了自己的程序计数器,以记录线程中下一条指令的执行地址。

特点归纳:

  1. 程序计数器是线程私有的。
  2. 程序计数器是运行时数据区中唯一不会发生内存泄漏的区域。

虚拟机栈(JVM Stacks)

虚拟机栈是一个线程执行的区域,用来存储栈帧。下面先来了解几个概念:

  • 栈:简单来说,就是先进后出,是线程的运行空间
  • 栈帧:是方法的运行空间,随方法的调用而创建(入栈),随方法的结束而销毁(出栈)。每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回值地址。
  • 局部变量表:顾名思义,就是用来存储局部变量。在java文件的编译期间就确定了局部变量表的最大容量。
  • 操作数栈:方法内的操作,如自增、相加、赋值等等,都要将相应的数据入栈,以完成对应的操作。
  • 动态链接:每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接。Class文件中有大量的符号引用,一部分会在类加载中的解析阶段转化为直接引用,这种转化成为静态解析;而一部分会在运行时动态地转化为直接引用,称为动态链接。
  • 方法返回值地址:由调用者的程序计数器的值确定方法结束后返回的地址。

虚拟机栈的执行过程:

特点归纳:

1.java虚拟机栈是线程私有的,随线程的创建而创建,有多少个线程,就会开辟多少个相互独立的虚拟机栈。
2.每调用一个方法,就会在虚拟机栈中压入一个栈帧,该方法内部再调用其他方法,则会压入新的栈帧,方法结束后将栈帧弹出栈。

JVM启动时就创建,是所以类实例和数组对象分配内存的区域,被所有线程共享。
特点归纳:

  1. 堆的空间可以是固定的,也可以随着程序需求动态的扩展,并在不需要过多空间是自动收缩。堆的内存空间不需要保证是连续的。
  2. 堆中的对象都需要考虑线程安全。
  3. 有垃圾回收机制

方法区

在Java虚拟机中,方法区是可以供各个线程共享的运行时内存区域。他存储了一个类的结构信息,如常量池、类的相关信息、类加载器。
方法区在JDK6或7中就是Perm Space【 永久代】

在JDK 8中就是Metaspace【 元空间】

特点归纳:

  1. 方法区是各个线程共享的内存区域, 在虚拟机启动时创建。
  2. 用于存储已被虚拟机加载的类信息、 常量、 静态变量等。
  3. 虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分, 但是它却又一个别名叫做Non-Heap(非堆), 目的是与Java堆区分开来。

本地方法栈

对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时, 这些方法就会在本地方法栈中执行。

本文发布于:2024-01-31 04:03:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664499725290.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内存   结构   JVM
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23