Qouson's blog Qouson's blog
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

qouson

Java界的小学生
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • String

  • 网络编程

  • JVM

    • JVM-ERROR
    • JVM-GC
    • JVM-体系结构
      • 体系结构
      • 运行数据区
    • JVM-参数和调优
    • JVM-类运行机制
    • JVM
  • 多线程

  • JavaSE
  • JVM
qouson
2024-05-23
目录

JVM-体系结构

# JVM-体系结构

# 体系结构

20210313120914 20210328210906

  • java8将Permanent Generation移除,改为Metaspace
  • Java栈改为虚拟机栈
  • 方法区和堆是线程共享区域,所有线程共享这一块内存数据,随虚拟机或GC而创建和销毁
    • 方法区:
      • JVM用来存储加载的类信息,常量,静态变量,编译后的代码等数据。
        • 类信息
        • 运行时常量池
        • 字符串常量
      • 虚拟机规范中这是一个逻辑区域。具体实现根据不同虚拟机来实现。
      • 如:oracle的HotSpot在java7中方法区在永久代,java8在元数据空间,并且通过GC机制对这个区域进行管理。
    • 堆:
      • 新生代 New
        • Eden
        • From Survior/Survior0(S0)
        • To Survior/Survior1(S1)
      • 老年代 Old
  • 虚拟机栈,本地方法栈,程序计数器是线程独占区域,随线程生命周期而创建和销毁
    • 虚拟机栈
      • 每个线程都有这个私有空间。
      • 线程栈由多个栈帧(Stack Frame)组成。
      • 一个线程会执行一个或多个方法,一个方法对应一个栈帧。
      • 栈帧内容包含:
        • 局部变量表
        • 操作数栈
        • 动态链接
        • 方法返回地址
        • 附加信息
        • ...
      • 栈内存默认最大是1M,超出则抛出StackOverflowError
    • 本地方法栈
      • 和虚拟机栈功能类似,虚拟机栈时为虚拟机执行Java方法准备,本地方法栈是为虚拟机使用Native本地方法而准备的。
      • 虚拟机规范没有规定具体的实现,由不同的厂商实现。
      • HotSpot虚拟机中虚拟机栈和本地方法栈的实现方式一样,同样超出大小以后会抛出StackOverflowError
    • 程序计数器
      • 记录当前线程执行字节码的位置,存储的是字节码指令地址,如果执行Native方法,则计数器为空。
      • 每个线程都在这个空间有一个私有空间,占用内存空间少。
      • CPU同一时间,只会执行一条线程中的指令。JVM多线程会轮流切换并分配CPU执行时间的方式。为了线程切换后,需要通过程序计数器,来恢复正确的执行位置。

# 运行数据区

20210412110307

  • JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据
  • 虚拟机中这是一个逻辑划分。具体实现根据不同虚拟机来实现。如oracle的HotSpot在Java7中方法区放在永久代,Java8放在元数据空间,并且通过GC机制对这个区域进行管理。
编辑 (opens new window)
上次更新: 2024/05/24, 11:36:46
JVM-GC
JVM-参数和调优

← JVM-GC JVM-参数和调优→

最近更新
01
杂乱无章
12-25
02
基础-大彬
11-14
03
集合-大彬
11-14
更多文章>
Theme by Vdoing | Copyright © 2023-2025 qouson
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式