海风影像馆 海风影像馆
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档

知行旅人

生有热烈,藏于俗常。
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 数据结构

  • 算法

  • Java基础

  • Java并发

  • JVM

    • 内存模型
      • 1 内存模型图
      • 2 JVM内存参数设置
      • 3 为什么要将永久代(PermGen)替换为元空间(MetaSpace)?
      • 4 JVM内存模型包括哪些数据区域?
        • 4.1 方法区(元空间)
        • 4.2 堆
        • 4.3 栈
        • 4.4 本地方法栈
        • 4.5 程序计数器
    • 类加载
    • 虚拟机对象
    • 垃圾回收
    • 工具命令
    • 生产配置示例
  • 开发框架

  • 持久化

  • 缓存

  • 消息中间件

  • 微服务

  • 系统架构

  • 网络

  • 操作系统

  • 学习笔记
  • JVM
zhixinglvren
2022-05-07
目录

内存模型

# 1 内存模型图

# 2 JVM内存参数设置

-Xss设越小count值越小,说明一个线程栈里能分配的栈帧就越少,但对JVM整体来说能开启的线程数会更多。

# 3 为什么要将永久代(PermGen)替换为元空间(MetaSpace)?

1.永久代受限于JVM本身设置的固定大小上限。元空间使用的是直接内存,只受本机可用内存限制。

# 4 JVM内存模型包括哪些数据区域?

主要包括5大块。

1.方法区(元空间),堆都为数据共享区域,有线程安全问题。

2.栈、本地方法栈、程序计数器为独享区域,不存在线程问题。

# 4.1 方法区(元空间)

存储已被虚拟机加载的类信息、常量、静态变量,即编译器编译后的代码等数据。方法区还有一个别名叫Non-Heap(非堆)。

# 4.2 堆

此内存区域的唯一目的就是存放对象实例,几乎所有对象实例以及数组都在这里分配内存。

JDK1.7之后开始默认开启逃逸分析:如果某些方法中的对象没有被返回或者未被外面引用(未逃逸),那么该对象可以在栈上分配内存。

# 4.3 栈

栈也就是Java虚拟机栈,由一个个栈帧组成,每个栈帧拥有:

局部变量表、操作数栈、动态链接、方法出口信息。

局部变量表主要存放编译期可知的各种数据类型(byte、short、int、long、float、double、boolean、char)、对象引用。

每一次方法的调用都会有一个对应的栈帧被压入java栈,方法调用结束后,栈帧弹出。

Java方法有2种返回方式:

1.return语句。

2.抛出异常。

不管哪种返回方式都会导致栈帧弹出。

# 4.4 本地方法栈

和虚拟机栈发挥的作用非常相似,区别是:虚拟机栈执行的是Java方法服务,本地方法栈执行的是Native方法服务。

本地方法执行的时候,在本地方法栈也会创建一个栈帧,用于存放该本地方法的局部变量表、操作数栈、动态链接、出口信息。

本地方法执行完毕后也会出栈并释放内存空间。

# 4.5 程序计数器

每条线程都有独立的程序计数器,各线程之间计数器互不影响。

上次更新: 2022/11/24, 17:59:25
多线程
类加载

← 多线程 类加载→

最近更新
01
Linux常用指令
11-24
02
GitHub高级搜索技巧
11-24
03
散列表
11-09
更多文章>
Theme by Vdoing | Copyright © 2020-2023 知行旅人 | MIT License | 粤ICP备20036515号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式