【JVM基础03】——组成-详细介绍下Java中的堆

目录

  • 1- 引言:堆
    • 1-1 堆是什么?(What)
    • 1-2 为什么用堆?堆的作用 (Why)
  • 2- ⭐核心:堆的原理(How)
    • 2-1 堆的划分
    • 2-2 Java 7 与 Java 8 的堆区别
  • 3- 小结:
    • 3-1 详细介绍下Java的堆?
    • 3-2 JVM 中的堆是如何划分的?
    • 3-3 Java 7 与 Java 8 的堆区别?


1- 引言:堆

1-1 堆是什么?(What)

  • 堆是线程共享的区域: 主要用来保存 对象实例数组 等,当堆中没 等,当堆中没有内存空间可分配给实例,也无法再扩展时,则抛出 OutOfMemory异常。

1-2 为什么用堆?堆的作用 (Why)

  • 1. 存储对象实例和数组:堆主要用于存储对象实例和数组,这些对象实例和数组可以在程序运行时动态分配内存。
  • 2. 支持垃圾回收:堆内存的管理支持垃圾回收机制,自动释放不再使用的对象,从而提高内存使用效率,减少内存泄漏风险。
  • 3. 线程共享:堆是所有线程共享的内存区域,使得对象可以在不同线程之间共享和传递,支持多线程编程。
  • 4. 灵活性和扩展性:堆内存可以根据程序运行时的需求动态扩展,适应不同应用的内存需求,避免因静态分配导致的内存浪费或不足。
  • 5. 方法区(元空间)的支持:堆包含方法区(在Java 8中为元空间),存储类信息、静态变量、常量池和编译后的代码,有助于类加载和运行时动态特性。
  • 6. 生命周期管理:通过年轻代和老年代的划分,堆能够有效管理对象的生命周期,提高垃圾回收的效率。

2- ⭐核心:堆的原理(How)

2-1 堆的划分

  • 堆总体上分为 年轻代老年代
    • 年轻代中堆又分为了 3 部分:Eden 区和两个大小严格相同的 Survivor 区,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象被移动到老年代区。
    • 老年代:主要保存生命周期长的对象,一般是一些老的对象。

image.png

  • 元空间:保存类的信息、静态变量、常量、编译后的代码。

2-2 Java 7 与 Java 8 的堆区别

  1. 方法区与元空间的变化
  • Java 7:堆中包含一个叫做 方法区(也称为永久代),用于存储类信息、静态变量、常量和编译后的代码。
  • Java 8方法区(Method Area)的概念依然存在,但它的实现方式发生了变化。永久代(PermGen)被移除,替换为元空间(Metaspace),元空间使用本地内存来存储类的元数据。
  1. 内存管理优化
  • Java 7永久代 的大小是固定的,需要手动调整,容易因设置不当导致内存溢出(OutOfMemoryError, OOM)。
  • Java 8元空间 动态扩展,减少了内存溢出的风险。将元空间放入本地内存中,使堆的空间更大,更灵活。

image.png


3- 小结:

3-1 详细介绍下Java的堆?

在这里插入图片描述

3-2 JVM 中的堆是如何划分的?

在这里插入图片描述

3-3 Java 7 与 Java 8 的堆区别?

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3249617.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

静态网站怎么更新数据

今天看到个问题 我不是行业从业者,但目前遇到一个问题 我公司网站为纯静态,除了直接从html里修改文字外能不能这样 建立一个xml或者txt文档,其中有很多信息,例如网站名称,电话,备案号等,一行一行…

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。 通常而言,一个典型UI5应用…

vscode通过ssh链接远程服务器上的docker

目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…

【flink】之如何快速搭建一个flink项目

1.通过命令快速生成一个flink项目 curl https://flink.apache.org/q/quickstart.sh | bash -s 1.19.1 生成文件目录: 其中pom文件包好我们所需要的基础flink相关依赖 2.测试 public class DataStreamJob {public static void main(String[] args) throws Except…

激活pytorch遇到报错usage: conda-script.py [-h] [--no-plugins] [-V] COMMAND ...

问题 今天初次尝试在pycharm上创建与激活虚拟环境,创建结束后,使用命令conda activate pytorch激活虚拟环境时出现以下报错: usage: conda-script.py [-h] [–no-plugins] [-V] COMMAND … conda-script.py: error: argument COMMAND: inval…

docker 安装并测试(Ubuntu下)

1. 确认安装环境(操作系统版本和 CPU 架构) 2. 如果有旧版本的 docker 需要进行卸载 使用 docker 命令检查是否已经安装了 docker 如果 docker 已经安装,使用以下命令卸载: apt-get purge docker-ce docker-ce-cli containerd…

JavaWeb笔记_Response对象

一.Response对象 1.1 Response对象概述 a.专门负责给浏览器响应信息(响应行,响应头,响应体)的对象 b.我们主要使用的是跟HTTP协议相关的Response对象:HTTPServletResponse,继承了ServletResponse&#x…

均值滤波算法及实现

均值滤波器的使用场景: 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区(也即延时周期),使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

Redis高级篇—分布式缓存

目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…

《基于 CDC、Spark Streaming、Kafka 实现患者指标采集》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

第三篇 Vue项目目录结构介绍

1、最外层目录结构 passagerFrontPage ├── .vscode //vscode配置,不用理会 ├── node_modules //项目依赖,npm install命令执行后自动生成 ├── public //公共资源存放 ├── src //源码 ├── tests //选装:测试模块 ├── .git…

负载均衡 lvs

1. 4层转发(L4) 与 7层转发(L7) 区别 4层转发(L4) 与 7层转发(L7) 区别 转发基于的信息 状态 常用的服务 L4 基于网络层和传输层信息: L4转发主要依赖于网络层IP头部(源地址,目标地址,源端口,目标端口)和传输层头部&#xff…

【python】OpenCV—Scanner

文章目录 1、需求描述2、代码实现3、涉及到的库函数cv2.arcLengthcv2.approxPolyDPskimage.filters.threshold_localimutils.grab_contours 4、完整代码5、参考 1、需求描述 输入图片 扫描得到如下的结果 用OpenCV构建文档扫描仪只需三个简单步骤: 1.边缘检测 2.使用图像中…

UniVue@v1.5.0版本发布:里程碑版本

前言 以后使用UniVue都推荐使用1.5.0以后的版本,这个版本之后,更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏,做出一款好游戏!本开源项目采用的开源协议为MIT协议,完全开源化,以后也…

IDEA的工程与模块管理

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

web安全之SQL手工注入漏洞测试

一、目的 1.掌握SQL注入原理; Sql注入详解(原理篇)_sql注入攻击的原理-CSDN博客 2.了解手工注入的方法; 3.了解MySQL的数据结构; 4.了解字符串的MD5加解密 二、过程 1.进去后出现以下界面 找注入点 发现有注入点,即id被代入执…

怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的日期时间格式转换和时区处理? 怎样优化 PostgreSQL 中对复…

Linux-开机自动挂载(文件系统、交换空间)

准备磁盘 添加三块磁盘(两块SATA,一块NVMe) 查看设备: [rootlocalhost jian]# ll /dev/sd* [rootlocalhost jian]# ll /dev/nvme0n2 扩:查看当前主机上的所有块设备,通过如下指令实现: [root…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数,但是怎么设置对小白来说有点困难,今天就介绍下具体的操作步骤,跟着实战去学习,更好的检验自己的技术水平,做技术还是那句话&…