JVM系列(八):堆(Heap)的相关知识介绍

2023-05-16

目录

1、JVM堆的概念

2、JVM堆的特点

3、JVM堆的内部结构

3.1 组成

3.2 堆内存内部空间所占比例

3.3 永久代和元空间区别

4、堆空间的大小设置

5、堆空间垃圾回收


1、JVM堆的概念

JVM中的堆是用来存放对象的内存空间,几乎所有的Java对象、数组都存储在JVM的堆内存中。比如当我们new一个对象或者创建一个数组的时候,就会在堆内存中分配出一段空间用来存放。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,便于后续的执行。

2、JVM堆的特点

  • 堆内存的存储特点:先进先出,后进后出

  • 堆是JVM占用区域最大的一块,并且在运行时动态地分配内存大小

  • 线程共享,整个 Java 虚拟机运行过程中只会有一个堆,所有的线程都访问同一个堆。而JVM中的程序计数器、Java 虚拟机栈、本地方法栈都是一个线程对应一个。

  • 虚拟机启动的时候创建堆。

  • 堆是JVM中涉及垃圾回收的主要场所。

  • 堆可分为新生代(Eden 区:From Survior,To Survivor)、老年代。

  • JVM规范规定堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。

  • 关于 Survivor(幸存区) s0,s1 区: 复制之后有交换,谁空谁是 to。

3、JVM堆的内部结构

3.1 组成

堆内存逻辑上由新生代 ( Young )、老年代 ( Old )、永久代(Perm)组成

新生代 ( Young )包括:Eden、From Survivor(From幸存区)和To Survivor(To幸存区)组成。

JDK1.7堆内部组成

JDK1.8 堆内部组成,其中永久代(Perm)换成了元空间

堆内存逻辑角度::堆=新生代+老年代+永久代或者元空间

堆内存物理角度:由新生代 ( Young )和老年代 ( Old )组成,公式如下:

堆内存的实际大小=新生代的大小+老年代的大小

3.2 堆内存内部空间所占比例

新生代与老年代的默认比例: 1:2

新生代区的默认比例是: 8:1:1

说明:在 HotSpot 中,Eden 空间和另外两个 SurvIvor 空间缺省所占的比例是 8:1:1

3.3 永久代和元空间区别

永久代:使用的是JVM的内存;存储字符串和数组容易出现性能和内存溢出问题,大小不好指定,GC复杂度高。

元空间:不再使用JVM的内存而是使用计算机本地内存,元空间大小只受本地内存限制。

元空间的设置参数:-XX:MetaspaceSize(初始值值)和-XX:MaxMetaspaceSize(最大值)

4、堆空间的大小设置

-Xms:表示堆区的初始内存,等价于 -XX:InitialHeapSize

-Xmx :表示堆区的最大内存,等价于 -XX:MaxHeapSize

注意:如果堆中的内存大小超过 “-Xmx" 所指定的最大内存值的时候,将会抛出 OutOfMemoryError 异常。

说明:一般情况下会将 -Xms 和 -Xmx 两个参数配置相同的值,其目的是为了能够在 java 垃圾回收机制清理完堆区后避免重新分隔计算堆区的大小,从而提高性能。

默认情况下:

初始内存:物理电脑内存大小 / 64

最大内存:物理电脑内存大小 / 4

5、堆空间垃圾回收

堆空间的垃圾回收有三种机制,MinorGC,MajorGC,FullGC。

Minor GC:清理年轻代内存空间(包括 Eden 和 Survivor 区域),释放在Eden中所有不活跃的对象,释放后若Eden空间还不满足以放入新对象,JVM会试图将部分Eden中活跃对象放入Survivor区。Survivor区被用来作为Eden及老年代的中间交换区域,如果老年代空间满了,Survivor区的对象会被移到老年代,否则会被保留在Survivor区。

Major GC:清理老年代内存空间,当老年代空间不够时,JVM会在老年代进行Major GC。

Full GC:清理JVM整个堆内存空间,包括年轻代和老年代空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM系列(八):堆(Heap)的相关知识介绍 的相关文章

随机推荐

  • JVM虚拟机学习笔记之-5. 字节码执行引擎

    文章目录 1 字节码执行引擎工作概览2 栈帧2 1 栈帧概述和概念结构2 2 局部变量表2 2 1 局部变量表分配规则2 2 2 局部变量表回收机制 2 3 操作数栈2 4 动态连接2 5 方法返回地址2 6 方法调用 3 分派3 1 静态
  • leetcode刷题记录总结-7.递归回溯算法(进行中)

    文章目录 零 回溯算法理论总览什么是回溯法回溯法的效率回溯法解决的问题如何理解回溯法回溯法模板 一 组合问题 77 组合 https leetcode cn problems combinations 题解递归实现组合型枚举 xff1a 每
  • Linux服务器开发-1. Linux系统编程复习

    文章目录 1 GCC1 1 gcc概念1 2 编程语言的发展1 3 gcc工作流程1 4 常见指令选项预处理 xff1a 指令 E xff1a 编译 xff1a 指令 S汇编 xff1a 指令 c链接 xff1a 指令 o指定宏 xff1a
  • 8皇后问题

    span class hljs keyword bool span check span class hljs stl container span class hljs built in vector span lt span class
  • Linux服务器开发-2. Linux多进程开发

    文章目录 1 进程概述1 1 程序概览1 2 进程概念1 3 单道 多道程序设计1 4 时间片1 5 并行与并发1 6 进程控制块 xff08 PCB xff09 2 进程的状态转换2 1 进程的状态2 2 进程相关命令查看进程实时显示进程
  • CMakeLists.txt 构建 Qt工程

    源码路径下包括 xff1a main cpp test cpp test h test ui test qrc cmake minimum required VERSION 3 1 0 project test SET CMAKE INCL
  • 【技术】RTK定位是什么?危化安全生产必看

    RTK定位技术是建立在流动站与基准站误差非常类似的基础上的 xff0c 它利用GPS载波相位观测值进行实时动态定位 RTK定位广受危化行业欢迎 xff0c 成为危化安全生产的热门技术选项 伴随着经济的高速发展 xff0c 信息技术取得了进一
  • GPS/RTK高精度定位系统有什么优势?

    GPS RTK高精度定位系统能提供厘米级 毫米级高精度位置服务 xff0c 逐渐成为智能社会高精度定位的趋势和理想选择 GPS RTK高精度定位系统的出现是信息化时代发展的产物 从移动互联到物联网 xff0c 位置是一个基础的不可或缺的信息
  • 【分享】高精度RTK定位解决方案

    高精度RTK定位系统采用高精度定位标签 xff0c 通过计算机技术 地理信息技术 移动定位技术 通信技术 网络技术 xff0c 为生产现场作业人员配发定位终端 xff0c 实时追踪其位置信息进行相关管控 xff0c 为其活动提供安全技术保障
  • 【分享】5G+北斗RTK高精度人员定位解决方案

    5G 43 北斗RTK高精度定位系统旨在通过5G网络实时提供亚米级 厘米级 毫米级高精度定位服务 xff0c 构建全天候 全天时 全地理的精准时空服务体系 伴随着信息技术日新月异的发展 xff0c 各类 智慧 顺势而出 xff0c 智慧城市
  • 5G+北斗RTK定位:高精度定位技术发展更进一步

    5G 43 北斗RTK定位采用5G定位与北斗RTK定位技术 xff0c 在信号 信息 设施 应用等层面深度融合 xff0c 5G自身可实现亚米级的定位能力与北斗形成信号覆盖互补 xff0c 实现从室内到室外无缝隙衔接与定位 5G通信技术的到
  • 室外定位:高精度北斗RTK定位技术

    北斗RTK定位技术 xff0c 也称北斗差分定位技术 xff0c 利用我国自主研发的北斗卫星定位系统实现精确定位功能 定位精度可根据需要 xff0c 通过选择不同精度的人员定位终端来实现 在科技强国的战略驱动下 xff0c 北斗RTK定位技
  • 【高精度定位】RTK定位与RTD定位知识科普

    高精度定位一般指亚米级别或厘米级别的定位 xff0c 常见的室内有蓝牙AoA和UWB两种技术 xff0c 室外有北斗地基增强技术 xff0c 这些技术都是采用算法进行定位 工业4 0时代 xff0c 在资源和环境约束不断强化的背景下 xff
  • curl http或https上传下载

    curl的使用 注意如果是https请求需要带上ssl的库和curl库如下图 上传文件 回调函数 span class token keyword static span size t span class token function h
  • 层次遍历构建二叉树

    span class hljs keyword struct span TreeNode span class hljs keyword int span val span class hljs keyword struct span Tr
  • Jetson tx2 使用 jetpack 4.3刷机全过程

    1 首先准备一台安装有ubuntu 18 04 ubuntu16 04 系统的主机 xff08 host也就是笔记本 xff09 2 在nvidia官网注册一个nvidia的账号用于下载jetpack 4 3时使用 xff08 刷机过程中需
  • 2020/2/21 Linux Socket编程 高级篇——广播

    广播 xff1a 实现一对多的通信 SO BROADCAST选项 它控制了UDP套接字是否能发广播数据报 xff0c 选项类型是int xff0c 非零表示 是 只有UDP能用 xff0c TCP不能 如果是一个广播地址 xff0c 但SO
  • 大小端字节序(Big Endian和Little Endian)

    那么何为字节序 xff08 Endia xff09 呢 xff1f Big Endian是指低地址存放最高有效字节 xff08 MSB xff09 xff0c 而Little Endian则是低地址存放最低有效字节 xff08 LSB xf
  • GPS定位及通信协议解析

    1 简介 上图为某公司的GPS定位模块 xff0c 自己在使用其进行GPS定位过程中学习到的知识分享给大家 主要参数如下 半双工 UART 3 3V TTL 电平 RS232 IIC CAN 接口输出 xff0c 更快速的应用 xff1b
  • JVM系列(八):堆(Heap)的相关知识介绍

    目录 1 JVM堆的概念 2 JVM堆的特点 3 JVM堆的内部结构 3 1 组成 3 2 堆内存内部空间所占比例 3 3 永久代和元空间区别 4 堆空间的大小设置 5 堆空间垃圾回收 1 JVM堆的概念 JVM中的堆是用来存放对象的内存空