Java --- JVM堆的概述与内存细分

2023-11-06

目录

一、堆

 二、堆的内存细分


一、堆

1、一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。

2、Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。

参考代码:

public class HeapDemo {
    public static void main(String[] args) {
        System.out.println("开始。。。");
        try {
            Thread.sleep(1000000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("结束。。。");
    }
}
public class HeapDemo1 {
    public static void main(String[] args) {
        System.out.println("开始。。。");
        try {
            Thread.sleep(1000000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("结束。。。");
    }
}

设置不同的参数:

指令:-Xms10m -Xmx10m 

 

 运行程序。使用Java自带jvisualvm.exe观察。

3、《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。

4、所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区 (Thread Local Allocation Buffer,TLAB)。

5、《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。(The heap is the run-time data area from which memory for all class instances and arrays 1s aiiocaleu )“几乎”所有的对象实例都在这里分配内存。—从实际使用角度看的。

6、数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置。

7、在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。

8、堆,是GC ( Garbage collection,垃圾收集器)执行垃圾回收的重点区域。

参考代码:

public class SimpleHeap {
    private int id;

    public SimpleHeap(int id) {
        this.id = id;
    }
    public void show(){
        System.out.println("my ID is" + id);
    }

    public static void main(String[] args) {
        SimpleHeap s1 = new SimpleHeap(1);
        SimpleHeap s2 = new SimpleHeap(2);

        int[] arr = new int[10];
        Object[] arr1 = new Object[10];
    }
}

 二、堆的内存细分

现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:

这里主要区别在于jdk8以前是新生区、养老区、永久区。jdk8即以后使用元空间代替了永久区。 

 jdk7的堆内部空间:

 设置参数:-Xms10m -Xmx10m -XX:+PrintGCDetails 打印垃圾回收细节

 打印信息:

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

Java --- JVM堆的概述与内存细分 的相关文章

  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • 是否可以同时读取和写入 java.net.Socket?

    是否可以同时从套接字读取和写入 我有一个连续读取套接字的线程 由于只有一个线程正在从套接字读取数据 因此读取操作是线程安全的 现在我有很多线程 比如100 写入套接字 因此 很明显 我必须通过这样做来使写操作线程安全 package com
  • 通过 Java Spring 构建 sitemap.xml [重复]

    这个问题在这里已经有答案了 我正在通过 Spring MVC 构建 sitemap xml XmlRootElement name urlset public class XmlUrlSet XmlElements XmlElement n
  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • 谷歌地图返回空指针异常

    当我尝试在片段上显示地图时 它返回空指针异常 我已将所有内容添加到清单中的每个权限中 我正在附加片段文件 XML 文件和日志目录 Chatffragment java public class ChatFragment extends Fr
  • android listviews:页眉和页脚视图

    在我的 ListActivity 中 我需要页眉和页脚视图 位于列表的顶部和底部 分别用作列表上的上一页和下一页按钮 因为我只想一次仅显示 20 个项目 我通过执行以下操作来设置头视图和脚视图 getListView addHeaderVi
  • 计算两个 Java 日期实例之间的差异

    我正在使用Java的java util DateScala 中的类并想要比较Date对象和当前时间 我知道我可以使用 getTime 计算增量 new java util Date getTime oldDate getTime 然而 这只
  • 负字符值JAVA

    为什么会出现以下情况 char p 0 p System out println p result 65535 为什么不给出编译错误或运行时异常 我预计它是因为字符不能为负数 相反 它从颠倒开始倒数 提前致谢 为什么不给出编译错误或运行时异
  • java.util.Prefs 抛出 BackingStoreException - 为什么?

    我有一个系统可以缓存启动时 SOAP 调用的微小 简单结果 我需要实例能够在启动时重新加载其缓存 以防 SOAP 服务失效 并且还需要处理使用此缓存文件的多个实例的可能性 我选择使用java util prefs但是 Java 的内置自动同
  • 如何模拟类路径上属性文件的存在?

    这肯定是一个常见问题 我有一个像这样的属性文件my settings properties由应用程序类读取 当我编写测试类时 它需要测试可能存在的不同场景my settings properties为了确保最大的代码覆盖率 例如空属性文件
  • gRPC 客户端重新连接逻辑导致服务器端打开重复流

    我有一个使用两个双向流的 gRPC 客户端 由于目前未知的原因 当我们每小时发送一次 keepAlive ping 时 会出现 onError 并带有statusRuntimeException在两个流上都被调用 为了处理重新连接 我在 j
  • 使用 Spring Boot 应用程序属性设置 tomcat 属性

    我想为启动提供的 tomcat 设置 maxSwallowSize 属性 我的 application properties 有这一行 server context parameters maxSwallowSize 20971520 由于
  • JAXB 将不需要的命名空间声明附加到标签

    我正在实现 XMPP 的自制子协议 并且使用 StAX 和 JAXB 的组合来解析 编组消息 当我整理一条消息时 我最终会得到大量不需要的命名空间声明
  • Android 折叠工具栏在折叠时没有隐藏其他元素

    我在 Android 上有一个布局 支持设计折叠工具栏 其中包含 TextView 但是当我折叠工具栏时 一些带有工具栏标题的 TextView 我想隐藏所有其他内容 而不是工具栏和标题 这是我的布局
  • Java swing:为 JComboBox 实现我的 Combobox 模型

    我需要我的组合框包含组织的简称 问题是我can在下拉列表中查看组织名称 但是cant实际上选择它 我的错误在哪里 public class ToComboBoxModel extends AbstractListModel implemen
  • 如何用 JSON 表示数据库中的图像

    我需要基于数据库中的 blob 创建 JSON 为了获取 blob 图像 我使用下面的代码并在 json 数组中显示之后 Statement s connection createStatement ResultSet r s execut
  • 如何在 spring-ws 中解析 SoapFaultClientException

    我正在使用 spring ws 2 3 1 在为 Web 服务创建客户端时 有时我得到SoapFaultClientException像下面这样
  • Resilience4j 重试 - 记录来自客户端的重试尝试?

    是否可以使用resilience4j在客户端记录重试尝试 也许通过某种配置或设置 目前 我正在将resilience4j与Spring boot Webflux一起使用基于注释 它运作良好 该项目很棒 当我们将服务器日志放在服务器端时 为了
  • 使用 Vaadin 生成 HTML 速度缓慢

    我是一个有问题的开发人员 目前我们的项目 使用 Vaadin 即将结束 但是 我们在其中一个视图中显示简单数据时遇到了一些麻烦 Vaadin 完成生成后 需要显示超过 500 KB 的数据 以及超过 15K 的 DOM 元素 在完成之前需要

随机推荐

  • 学习笔记--配置DHCP服务器(基于接口的地址池)

    一 开启DHCP功能 并且把相应端口加入VLAN 并且设置vlan网关1 开启dhcp功能 Huawei dhcp enable 2 创建vlan 10 20 Huawei vlan batch 10 20 3 把g0 0 1 跟g0 0
  • 分组转发算法

    1 首先从IP数据报首部提取出目的主机的IP地址D 得出其所在的网络N 2 若N就是与此路由器直接相连的某个网络 则进行直接交付 不需要经过其它的路由器 进行转发 直接把数据报交付给目的主机 否则就执行 3 3 若路由表中有目的地址为D的特
  • torch包下载和安装失败的解决

    今天打算使用python的 torch包的时候 输入pip install torch 在pycharm下载一直失败 报错信息里面提示一开始是pip版本出错 WARNING You are using pip version 20 0 2
  • ora-30926:无法在源表中获得一组稳定的行

    解决办法 原表的数据保证唯一 可以distinct
  • dll、so库转Java代码

    dll so库转Java代码 下载jar JNA代码生成 参数说明 生成的maven项目代码结构如下 众所周知 java程序如果要调用动态库 so dll 的函数 最传统方式是使用JNI技术 用JNI写java调用接口代码是非常痛苦的 调试
  • 538.把二叉搜素树转换为累加树

    538 把二叉搜索树转换为累加树 题干描述 解题思路 递归 1 递归函数参数以及返回值 2 确定终止条件 3 确定单层递归的逻辑 迭代 代码实现 递归法 迭代法 题干描述 力扣入口 给出二叉搜索树的根节点 该树的节点值各不相同 请你将其转换
  • 13智慧农业

    一张图读懂一个产业之智慧农业 一般认为 智慧农业指的是利用物联网 人工智能 大数据等现代信息技术与农业进行深度融合 实现农业生产全过程的信息感知 精准管理和智能控制的一种全新的农业生产方式 可实现农业可视化诊断 远程控制以及灾害预警等功能
  • 时序预测:使用MATLAB实现时间序列回归中的偏差估计

    时序预测 使用MATLAB实现时间序列回归中的偏差估计 时间序列数据分析是指对某个时间段内连续的数据进行建模和预测的过程 在时间序列分析中 通常需要进行时序预测 即预测未来的数据值 时间序列回归是一种在保持时间序列结构的同时 通过相关数据来
  • 性能测试项目实战:应用加载慢该怎么办?

    一 背景 app收到留学push 课堂 资讯 用户点击push消息 进入app 应用加载很慢 容易出现应用假死 app崩溃或提示网络异常等信息 给用户体验十分不友好 监控阿里云资源tcp连接数飙高 cpu打满 自愈能力 系统恢复能力 低 二
  • taro + linaria styled 报错 Property ‘__linaria‘ is missing

    更新 下面的解决方案不好 估计暂时不支持 我先用css 功能 报错信息 FileDescription Author 刘凯 Date 2021 04 26 08 53 19 LastEditors 刘凯 LastEditTime 2021
  • C++对于const重铸,在结构体中的const引用通过const_cast转换值

    include
  • 在VS中安装Qt插件(配置Qt环境)

    1 下载Qt的插件 Qt插件的网址 http download qt io archive 2 将Qt插件安装到vs上 下载完毕后会得到后缀名为 vsix 的工具 直接运行这个插件 前提是你电脑上已经安装了vs 安装过程等待 安装成功 3
  • 2019南科大计算机系夏令营笔试&面试

    2019南科大计算机系夏令营笔试 面试 笔试 笔试时间2个小时 卷面总分200分 其中操作系统50分 数据结构50分 离散数学50分 计算机网络50分 操作系统为中文题目 其余均为英文题目 操作系统考察进程相关知识占比很大 如进程执行时间
  • oauth2.0的配置信息AuthorizationServerConfigurerAdapter

    继承AuthorizationServerConfigurerAdapter方法的配置 Configuration EnableAuthorizationServer public class Oauth2ServerConfig exte
  • 求解矩阵最小路径和(详细分析)

    求解矩阵最小路径和 给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 如下面一个4行4列的矩阵 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0
  • Flutter插件开发集成aar包出现:Could not determine the dependencies of task ':flutter_vpn:compileDebugAidl'.问题

    概述 最近在做一个Flutter的插件开发 需要在android及ios原生中集成sdk 然后Flutter通过插件调用sdk的方法 这其中涉及到aar包的集成 虽然是Flutter的插件开发 但是关于android原生的aar包集成还是差
  • 网络--tcp协议中控制位

    网络层中的tcp协议 首先看一下tcp的报头信息 其中其余的好理解 但是它是拥有了6个控制位的 说明了此次报文段的性质 紧急URG URGent 当URG等于1时 表明紧急指针字段有效 它告诉系统此报文段中有紧急数据 应尽快传送 相当于高优
  • MySQL 索引 详解(保姆级教程)

    一 索引概述 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就是索引 二 索引
  • STM32学习日记--Day3--PWM驱动LED灯

    PWM基本结构 主函数 include stm32f10x h Device header include Delay h include OLED h include PWM h uint8 t i int main void OLED
  • Java --- JVM堆的概述与内存细分

    目录 一 堆 二 堆的内存细分 一 堆 1 一个JVM实例只存在一个堆内存 堆也是Java内存管理的核心区域 2 Java堆区在JVM启动的时候即被创建 其空间大小也就确定了 是JVM管理的最大一块内存空间 堆内存的大小是可以调节的 参考代