JVM虚拟机系统性学习-运行时数据区(堆)

运行时数据区

JVM 由三部分组成:类加载系统、运行时数据区、执行引擎

在这里插入图片描述

下边讲一下运行时数据区中的构成

根据线程的使用情况分为两类:

  • 线程独享(此区域不需要垃圾回收)
    • 虚拟机栈、本地方法栈、程序计数器
  • 线程共享(数据存储区域,此区域需要垃圾回收)
    • 存储类的静态数据和对象数据
    • 堆和方法区

Java 堆在 JVM 启动时创建内存区域去实现对象、数组与运行时常量的内存分配,它是虚拟机管理最大的,也是垃圾回收的主要内存区域

在这里插入图片描述

在 JDK1.8 中,堆由两部分组成:新生代和老年代

而在 JDK1.9 中,取消了新生代和老年代的物理划分,将堆划分为若干个区域 Region,如下图:

在这里插入图片描述

可以通过代码查看堆空间的大小:

public class HeapSpaceInitial {
   public static void main(String[] args) {
      /**
         使用Runtime.getRuntime()获取当前 (运行时数据区) , 是单例的。
       */

      // 返回Java虚拟机中的堆内存总量
      long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
      // 返回Java虚拟机试图使用的最大堆内存量
      long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;

      System.out.println("-Xms: " + initialMemory + "M");
      System.out.println("-Xmx: " + maxMemory + "M");

      System.out.println("系统初始内存大小为: " + initialMemory * 64.0 / 1024 + "G");
      System.out.println("系统最大内存大小为: " + maxMemory * 4.0 / 1024 + "G");

      /**
       输出:
       -Xms: 243M
       -Xmx: 3609M
       系统初始内存大小为: 15.1875G
       系统最大内存大小为: 14.09765625G
       */
   }
}

通过命令行查看堆中的参数:

jps # 查看运行的进程
jstat -gc 进程id  # 查看该进程的堆中参数

通过 VM options 查看垃圾回收时的信息:

-XX:+PrintGCDetails

Java 中新创建的对象如何分配空间呢?

  1. new 的对象先放 Eden 区(如果是大对象,直接放入老年代)
  2. 当 Eden 区满了之后,程序还需要创建对象,则垃圾回收器会对 Eden 区进行垃圾回收
  3. 在垃圾回收的时候,会将 Eden 区的幸存对象转移到 Survivor From 区
  4. 如果再次触发垃圾回收,此时将 Eden 区的幸存对象转移到 Survivor To 区中,并且将 Survivor From 区中的幸存对象也转移到 Survivor To 区
  5. 如果再次出发垃圾回收,此时将 Eden 区和 Survivor To 区中的幸存对象转移到 Survivor From 区中
  6. 当对象的生存年龄达到 15 时,会被放入老年代

在幸存对象每次转移的时候,对会将对象的生存年龄 + 1,达到 15 时会放入老年代中

Java 对象只会分配在堆中吗?

不是的,如果经过 逃逸分析 后发现,一个对象并没有逃逸出方法的话,就可能被优化为在栈上分配,这是常见的堆外存储技术。

逃逸分析就是分析对象动态作用域:

  • 对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸
  • 对象在方法中被定义后,对象被外部方法所引用,则认为发生逃逸

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉搜索树中第K小的元素[中等]

优质博文:IT-BLOG-CN 一、题目 给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k个最小元素(从1开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出&#x…

编译Android14 AOSP原生代码并运行X86模拟器镜像过程记录

最近在研究Android Entreprise部分的特性,需要在Android手机上分析WorkProfile相关的源码,因为新买的Pixel样机还未到货,看了几天Android源码,迫切需要上真机对比分析。 又听说最近几年Android模拟器已经有些进步,至少…

【利用二手车数据进行可视化分析】

利用二手车数据进行可视化分析 查看原始数据去除重复数据需求分析1.统计全国总共有多少量二手车,用KPI图进行展示2.统计安徽总共有多少量二手车,用KPI图进行展示3.统计合肥总共有多少量二手车,用KPI图进行展示4.取最贵的10辆二手车信息&#…

游戏提示找不到d3dx10_43.dll怎么办?5种方法教你如何修复

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“缺少d3dx10_43.dll文件”。这个错误提示通常出现在运行某些游戏或应用程序时,它意味着系统无法找到所需的动态链接库文件。本文将详细介绍d3dx10_43.dll文件的作用以及导致其丢…

class066 一维动态规划【算法】

class066 一维动态规划 算法讲解066【必备】从递归入手一维动态规划 code1 509斐波那契数列 // 斐波那契数 // 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 // 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。…

从关键新闻和最新技术看AI行业发展(2023.11.20-12.3第十一期) |【WeThinkIn老实人报】

Rocky Ding 公众号:WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习&…

睡觉时总在凌晨3、4点醒来,再无睡意,一般暗示四大疾病,别忽视!

良好的睡眠是人体健康的重要因素,正常情况下的八小时睡眠时间在人们一天的时间中占比三分之一,睡眠是人体器官进行自我修复和调整的关键时间,睡眠质量不好,则会影响各个器官的健康,人们可以从睡眠中发现身体的异常&…

常见web漏洞的流量分析

常见web漏洞的流量分析 文章目录 常见web漏洞的流量分析工具sql注入的流量分析XSS注入的流量分析文件上传漏洞流量分析文件包含漏洞流量分析文件读取漏洞流量分析ssrf流量分析shiro反序列化流量分析jwt流量分析暴力破解流量分析命令执行流量分析反弹shell 工具 攻击机受害机wi…

midwayjs从零开始创建项目,连接mikro-orm框架(必须有java的springboot基础)

前言: 我一直都是用java的springboot开发项目,然后进来新公司之后,公司的后端是用node.js,然后框架用的是 midwayjs ,然后网上的资料比较少,在此特地记录一波 文档: 1.官方文档:介绍…

Linux C/C++ 从内存转储中恢复64位ELF可执行文件

ELF(Executable and Linking Format)是一种对象文件的格式,它主要用于定义ELF(Executable and Linking Format)是一种对象文件的格式,它主要用于定义不同类型的对象文件中的内容以及它们的存储方式。一个EL…

深入了解对象与内置构造函数

1. 深入对象 1.1 创建对象的三种方式 1.2 构造函数 语法约定: 总结 构造函数可以快速创建多个对象大写字母开头的函数使用new关键字将对象实例化构造函数不需要返回值自动返回新的对象 new实例化的执行过程 创建空对象this指向对象执行代码,追加新…

class069 从递归入手三维动态规划【算法】

class069 从递归入手三维动态规划 code1 474. 一和零 // 一和零(多维费用背包) // 给你一个二进制字符串数组 strs 和两个整数 m 和 n // 请你找出并返回 strs 的最大子集的长度 // 该子集中 最多 有 m 个 0 和 n 个 1 // 如果 x 的所有元素也是 y 的元素,集合 x 是…

SVN修改已提交版本的日志方法

1.在工做中一直是使用svn进行項目的版本控制的,有时候因为提交匆忙,或是忘了添加Log,或是Log内容有错误。遇到此类状况,想要在查看项目的日志时添加log或是修改log内容,遇到以下错误: Repository has not b…

2023最新最全【Wireshark 】 安装教程(附安装包)

简介 wireshark是非常流行的网络封包分析工具,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。 为了安全考虑,wireshark只能查看封包,而…

公式识别任务各个链条全部打通

目录 引言公式识别任务是什么?公式识别任务解决方案初探使用建议写在最后 引言 随着LaTeX-OCR模型转换问题的解决,公式识别任务中各个链条已经全部打通。小伙伴们可以放开膀子干了。 解决业界问题的方案,并不是单独训练一个模型就完事了&am…

汽车网络安全--关于UN R155认证的思考

1.UN R155概述 2020年6月25日,联合国颁布了全球首个汽车网络安全强制性法规 -- UN 155,详细规定了关于评估网络安全措施的审核条款、制造商和供应商降低网络安全风险的方法以及实施风险评估的义务等。 法规适用于与信息安全相关的M类(4轮及以上载客汽车)、N类(四轮载货汽车)…

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:不要在乎别人怎么看你,因为他们根本就没有时间,他们只关心他们自己。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…

Leetcode刷题笔记题解(C++):25. K 个一组翻转链表

思路&#xff1a;利用栈的特性&#xff0c;K个节点压入栈中依次弹出组成新的链表&#xff0c;不够K个节点则保持不变 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <stack> class Solution { …

【数据结构 — 排序 — 选择排序】

数据结构 — 排序 — 选择排序 一.选择排序1.基本思想2.直接选择排序2.1算法讲解2.2.代码实现2.2.1.函数定义2.2.2.算法接口实现2.2.3.测试代码实现2.2.4.测试展示 3.堆排序3.1.算法讲解3.2.代码实现3.2.1.函数定义3.2.2.算法接口实现3.2.3.测试代码实现3.2.4.测试展示 一.选择…

【数据结构实践课设】新生报道注册管理信息系统

目录 1.主要框架 2.写入文件 3.读取文件 4.注册学生信息 5.增加学生信息 6.删除学生信息 7.按姓名查询 8.按班级查询 9.按专业查询 10.打印学生信息 11.完整代码 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所…