【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://www.mzph.cn/news/872052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论原理精解【1】

文章目录 测度概述集类笛卡尔积定义例子 多集合的笛卡尔积定义计算方法注意事项 有限笛卡尔积的性质1. 定义2. 性质2.1 基数性质2.2 空集性质2.3 不满足交换律2.4 不满足结合律2.5 对并和交运算满足分配律 3. 示例4. 结论 参考链接 测度 概述 所谓测度,通俗的讲就…

基于springboot与vue的旅游推荐系统与门票售卖

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

如何在 C# 中实现高效的内存管理,避免内存泄漏和提高性能?

在C#中实现高效的内存管理和提高性能可以采取以下几个方法: 使用对象池:对象池是一种重复使用对象的技术,可以减少内存分配和释放的开销。可以使用 ObjectPool 类或者自定义一个简单的对象池来管理对象的创建和回收。 及时释放资源&#xff…

iPhone数据恢复:如何从iPhone恢复误删除的短信

来自iPhone的意外删除的短信可能很关键。它们可能是来自您常用应用程序、银行交易、付款收据的重要通知,也可能是来自朋友的重要文本、孩子的学校通知等。 如果您也从iPhone丢失了此类消息,我们在这里分享如何在没有备份以及有备份的情况下在iPhone上恢…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者 文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Serv…

人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域,模型的训练目标是找到一组参数,使得模型能够从训练数据中学习到有用的模式&am…

2023年高教杯数学建模2023B题解析(仅从代码角度出发)

前言 最近博主正在和队友准备九月的数学建模,在做往年的题目,博主主要是负责数据处理,运算以及可视化,这里分享一下自己部分的工作,相关题目以及下面所涉及的代码后续我会作为资源上传 问题求解 第一题 第一题的思路主要如下:…

【SpringBoot】SpringCache轻松启用Redis缓存

目录: 1.前言 2.常用注解 3.启用缓存 1.前言 Spring Cache是Spring提供的一种缓存抽象机制,旨在通过简化缓存操作来提高系统性能和响应速度。Spring Cache可以将方法的返回值缓存起来,当下次调用方法时如果从缓存中查询到了数据&#xf…

基于 jenkins 部署接口自动化测试项目!

引言 在现代软件开发过程中,自动化测试是保证代码质量的关键环节。通过自动化测试,可以快速发现和修复代码中的问题,从而提高开发效率和产品质量。而 Jenkins 作为一款开源的持续集成工具,可以帮助我们实现自动化测试的自动化部署…

Mysql:解决CPU飙升至100%问题的系统诊断与优化策略

在服务器运维过程中,CPU使用率飙升到100%是一个常见且棘手的问题。这不仅会严重影响服务器的性能,还可能导致服务中断。当遇到这类情况时,首要任务是快速定位问题源头并采取相应措施。以下是一个基于操作系统命令和MySQL数据库优化的详细解决…

快排的3种方式

//(前两种时间复杂度为o(n^2) , 最后一种为o(n*logn)public static void swap(int[] arr , int i , int j){arr[i] arr[i] ^arr[j];arr[j] arr[i] ^arr[j];arr[i] arr[i] ^arr[j]; } //使数组中以arr[R]划分,返回循环后arr[R]的所在地 public…

代码随想录算法训练营Day 62| 图论 part02 | 695. 岛屿的最大面积、1020.飞地的数量、130.被围绕的区域

代码随想录算法训练营Day 62| 图论 part02 | 695. 岛屿的最大面积、1020.飞地的数量、130.被围绕的区域 文章目录 代码随想录算法训练营Day 62| 图论 part02 | 695. 岛屿的最大面积、1020.飞地的数量、130.被围绕的区域65.岛屿的最大面积一、BFS二、DFS 1020.飞地的数量一、DFS…

自动化(二正)

Java接口自动化用到的技术栈 技术栈汇总: ①Java基础(封装、反射、泛型、jdbc) ②配置文件解析(properties) ③httpclient(发送http请求) ④fastjson、jsonpath处理数据的 ⑤testng自动化测试框架重点 ⑥allure测试报…

JMeter CSV 参数文件的使用教程

在 JMeter 测试过程中,合理地使用参数化技术是提高测试逼真度的关键步骤。本文将介绍如何通过 CSV 文件实现 JMeter 中的参数化。 设定 CSV 文件 首先,构建一个包含需要参数化数据的 CSV 文件。打开任何文本编辑器,输入希望模拟的用户数据&…

Scrapy 核心组件之Spiders组件的使用

Spiders 组件是 Scrapy 框架的核心组件,它定义了网络爬虫抓取网站数据的方式,其中包 括抓取的动作,如是否跟进链接,以及如何从网页内容中提取结构化数据。换言之,Spiders 组件用于定义抓取网页数据的动作及解析网页数据…

IGBT参数学习

IGBT(绝缘栅双极晶体管(Insulated Gate Bipolar Transistor))的内部架构如下所示: IGBT是个单向的器件,电流只能朝一个方向流动,通常IGBT会并联一个续流二极管 IGBT型号:IKW40N120T2 IKW40N120T2 电路符号…

ICPC铜牌算法

铜牌算法 2021ICPC上海站 铜牌开题: D:数学思维构造 E:贪心思维 G:树形dp H:图论克鲁斯卡尔重构树 I:背包dp K:思维构造2021ICPC沈阳站 铜牌开题: B:并查集 E:字符串简单查找 F:字符串简单构造模拟 J:BFS预处理2021ICPC南京站 铜牌开题: A:思维 C:暴力均摊stl D:贪心暴力…

【代码规范】.train(False)和.eval()的相似性和区别

【代码规范】.train(False)和.eval()的相似性和区别 文章目录 一、.train(False) 和 .eval() 的功能二、.train(False) 和 .eval() 的区别2.1 .eval()2.2 .train(False)2.3 总结 三、.eval()更加规范 一、.train(False) 和 .eval() 的功能 .train(False) 和 .eval() 在功能上非…

Centos7 安装Redis6.2.6 gcc报错问题解决

Redis 报错信息 make: *** [all] 错误 2 安装gcc 修改yum源,在安装更新rpm包时获得比较理想的速度,走阿里云镜像通道 发现报错信息如下: 正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)… 失败:未知的名称或服务。 wget: 无法解析主机地址 “mi…

LLM:学习清单 ing

根据模型的数据流程方向和自己的经验列出: 一、模型输入 分词器:BPE,BBPE 位置编码:绝对位置编码,三角函数编码,ROPE 词向量模型:词袋,监督学习模型;BGE,BC…