美文网首页
JVM内存结构

JVM内存结构

作者: 青春就那么一阵子 | 来源:发表于2019-02-14 13:33 被阅读0次

Java 虚拟机运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等

程序计数器

当前线程执行的虚拟机字节码的行号指示器,字节码解释器通过改变计数器的值来选取下一条要执行的字节码指令地址

虚拟机栈

java方法执行的内存模型,虚拟机栈就是有栈帧的容器,每一个方法调用就是栈帧在vm stack 进出的过程

栈帧

每个方法执行时都会创建一个栈帧,其内部包含:

  • 局部变量表:存放方法参数和方法内定义的局部变量,以索引方式引用,存储单元称为slot
  • 操作数栈:后人先出,字节码指令往操作数栈值写入提取内容
  • 动态链接:对应的是即时编译后Class文件存储的方法体引用地址
  • 方法返回地址:正常退出通俗讲就是返回方法调用处,当前栈帧出栈,班返回值压入调用者的操作数栈,调用程序计数器执行下一指令;异常退出:本方法异常表没有搜索到匹配的异常处理器(没有try catch异常)

方法区(非堆、永久代 Permanent Generation)

线程共享的内存区域,存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize-XX:MaxPermSize 参数调整

运行时常量池

方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中

堆 heap

也称Java 堆、GC堆是java虚拟机所管理的内存中最大的一块内存区域,是线程共享的内存区域,在JVM启动时创建,存放对象实例及数组。通过-Xms512m-Xmx512m 调整jvm运行内存大小,默认设置为一致

命令 阈值 描述
-Xms512m 物理内存的1/64但小于1G,一理论为服务器内存的1/2-3/4之间 JVM启动时申请的最小内存
-Xmx512m 同Xms一致 JVM启动时申请的最大内存
-XX:MinHeapFreeRatio=40 小于阈值增大到Xmx 默认40%
-XX:MaxHeapFreeRation=70 大于阈值减小到Xms 默认70%

下图是根据理解所画


5455988-9eb5a2bb717fd357.png

有疑问不妥之处请留言讨论

相关文章

  • JVM内存结构和Java内存模型

    最近看到两个比较容易混淆的概念:JVM内存结构和Java内存模型 JVM内存结构JVM内存结构或者说内存模型指的是...

  • JVM 内存结构解析

    1. JVM内存结构 (1) JDK1.7的JVM内存结构 JVM内存结构主要有三大块:堆内存、方法区和栈。 堆内...

  • JVM学习笔记

    一、JVM的结构图 1.1 Java内存结构 JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大...

  • JVM-02

    JVM内存结构

  • JVM内存模型和JVM内存结构的区别

    JVM内存模型与内存结构不是同一个概念,JVM内存结构是从运行时数据区的结构角度描述的概念,而JVM内存模型是从主...

  • 《深入理解java虚拟机》之JVM内存结构总结

    JVM内存结构 JVM内存结构不光是只有堆内存和栈内存,实际情况要复杂很多,主要包含以下结构。 程序计数器 每个线...

  • JVM

    简介 Jvm 系列一:Java类的加载机制Jvm系列二:JVM内存结构 --内存泄漏与内存溢出Jvm系列三:GC算...

  • java线程安全相关问题

    可见性问题的原因: 1.JVM内存结构: JVM的内存结构分为主内存(heap)和工作区内存。 主内存可以存放多线...

  • JVM(七):JVM内存结构

    JVM(七):JVM内存结构 在前几节的文章我们多次讲到 Class 对象需要分配入 JVM 内存,并在 JVM ...

  • java内存模型

    java代码是运行在jvm上面的,java的运行时内存结构即是jvm运行时结构。 java内存结构从内存是否共享的...

网友评论

      本文标题:JVM内存结构

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