美文网首页
JVM虚拟机内存区域

JVM虚拟机内存区域

作者: 菋丶 | 来源:发表于2021-01-11 19:04 被阅读0次

JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。

虚拟机栈

程序执行每个线程时调用许多方法,每个方法对应一个栈帧。一个个栈帧组成了虚拟机栈。也称栈内存,溢出时排除StackOverflowError异常。
栈帧内包括【局部变量表、操作栈、动态链接、返回地址】。

虚拟机栈.png
  1. 局部变量表
    方法内的局部变量。包括编译器可知的各种基本数据类型(boolean、byte、char、short、int、long、double)和对象引用reference类型。
  2. 操作栈
    取值、赋值、运算等指令操作。
  3. 动态链接
    调用方法的实际地址。
  4. 返回地址
    方法返回值的返回地址。

程序计数器

记录当前线程所执行的字节码的行号。

本地方法栈

Java具有跨平台特性,是指同一套java源代码可以在不同平台上执行。主要依赖于各个平台适配的JVM。
虚拟机会调用不同的平台的本地方法完成特定功能,这些平台自有的方法通常称为本地方法。
同Java方法一样,执行本地方法时也是通过栈的方式分配内存。

堆内存(线程共享)

堆内存

也称堆内存,主要存储对象示例和数组,是垃圾收集器的主要管理区域。根据分代收集算法,内部分为新生代和老年代两块区域。
新生代占堆内存1/3,其中又分为伊甸区、S1区和S2区,分别占比8:1:1。
新生代快满了,开始minor GC。
老年代占堆内存2/3,主要存放数组大对象和老对象。当其不够时,则开始STW进行full GC,当其溢出时排除OutOfMemoryError异常。

元空间(线程共享)

又称方法区、永久代。
主要存储被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
运行时常量池(Runtime Constant Pool)是方法区的一部分。
Class 文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

相关文章

  • Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 @(Java虚拟机)[jvm, 内存] [TOC] 运行时数据区域 Java虚拟机...

  • JVM从入门到精通系列(二):JVM内存区域及运行时内存

    JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA ...

  • JVM内存模型

    JVM内存区域 JVM内存区域主要分为线程私有区域【程序计数器,虚拟机栈,本地方法栈】,线程共享区域【JAVA堆,...

  • JVM内存区域划分

    一、概述 根据《Java虚拟机规范》的描述,JVM所管理的内存区域如下图所示: JVM内存区域主要分为线程私有区域...

  • jvm笔记

    JVM的内存模型是什么样子的? JVM内存模型可以大致可划分为线程私有区域和共享区域,线程私有区域由虚拟机栈、本地...

  • 深入理解java虚拟机学习笔记(一) java内存区域与相关异常

    1.JVM虚拟机运行时内存区域 jvm运行时所管理的内存将会分为如下几个区域:程序计数器、虚拟机栈、本地方法栈、方...

  • JVM

    JVM组成 jvm由类加载器+内存+执行引擎 JVM内存区域 堆 线程共享 存储对象 虚拟机栈 线程私有,生命周期...

  • JVM内存模型&JAVA内存模型

    JVM虚拟机内存区域概况 这里介绍的是JDK1.8 JVM运行时内存数据区域划分。1.8同1.7比,最大的差别就是...

  • JVM内存结构中有哪些是线程私有的?

    JVM的内存区域结构如下 内存区域大概可分为方法区,堆,虚拟机栈,本地方法栈,程序计数器,还会有直接内存(虚拟机对...

  • 阿里面试题若干 2020

    JVM内存模型及分区 Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的...

网友评论

      本文标题:JVM虚拟机内存区域

      本文链接:https://www.haomeiwen.com/subject/swndaktx.html