JVM之堆学习

一、Java虚拟机内存结构图

二、堆的介绍

1. 前面学习的程序计数器,虚拟机栈和本地方法栈都是线程私有的,堆是线程共享的;

2. 通过 new 关键字,创建的对象都会使用堆内存,其特点是:

  • 它是线程共享的,堆中对象都需要考虑线程安全的问题(虚拟机栈中的局部变量只要不逃离方法的作用范围就是线程安全的
  • 有垃圾回收机制

三、一些示例

3.1 堆内存溢出

1. 代码示例

package cn.itcast.jvm.t1.heap;

import java.util.ArrayList;
import java.util.List;

/**
 * 演示堆内存溢出 java.lang.OutOfMemoryError: Java heap space
 * -Xmx8m
 */
public class Demo1_5 {

    public static void main(String[] args) {
        int i = 0;
        try {
            List<String> list = new ArrayList<>();
            String a = "hahaha";
            while (true) {
                list.add(a); // hahaha, hahahahahaha, hahahahahahahahaha...
                a = a + a;
                i++;
            }
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println(i);
        }
    }
}

2. 报错信息 

3. 修改堆内存大小

 修改了堆内存大小后再次运行程序:

 

3.2 堆内存诊断工具

jps: 首先通过jps工具查看当前系统中有哪些Java进程

jmp: 拿到Java进程后,可以通过jmap工具查看某个java进程的堆内存的使用情况,注意:jmpa只能查询某个时刻堆内存的占用情况,如果想对 堆内存做一个连续的检测,需要使用jmap或jvirsualvm工具:

jconsole: 

jvirsualvm:

相关推荐

  1. <span style='color:red;'>JVM</span><span style='color:red;'>之</span><span style='color:red;'>堆</span>

    JVM

    2023-12-15 08:26:02      29 阅读
  2. jvm

    2023-12-15 08:26:02       35 阅读
  3. 学习记录JVM

    2023-12-15 08:26:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-15 08:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-15 08:26:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-15 08:26:02       82 阅读
  4. Python语言-面向对象

    2023-12-15 08:26:02       91 阅读

热门阅读

  1. Leetcode -2

    2023-12-15 08:26:02       52 阅读
  2. 项目中使用临时文件夹或获取文件资源路径

    2023-12-15 08:26:02       62 阅读
  3. Numpy库

    2023-12-15 08:26:02       69 阅读
  4. uniapp微信小程序下载保存图片流到本地,base64

    2023-12-15 08:26:02       77 阅读
  5. MSSQL存储过程的功能和用法

    2023-12-15 08:26:02       63 阅读
  6. 华为大数据开发者教程知识点提纲

    2023-12-15 08:26:02       44 阅读
  7. Servlet

    Servlet

    2023-12-15 08:26:02      45 阅读
  8. WPF中DataGrid设置默认选中行

    2023-12-15 08:26:02       57 阅读
  9. OpenCV开发:编译安装opencv

    2023-12-15 08:26:02       66 阅读
  10. 【✅面试编程题:如何用队列实现一个栈】

    2023-12-15 08:26:02       59 阅读
  11. AUTOSAR从入门到精通-中间件通信DDS(一)

    2023-12-15 08:26:02       61 阅读