java堆简单介绍

java对象实例是放置堆上,但不是说所有的对象实例都在对上,可能有些对象实例位于本地方法区

 下面说说堆的特点

 堆是属于java虚拟机中内存最大的一部分

堆是jvm中所有线程可以共享的

垃圾收集器管理的主要区域来源于java堆

 java堆可以细分为新生代和老年代

java堆在物理存储上是不连续的,但是逻辑上是连续的,对应的大小通过-Xms和-Xmx调节

堆中的实例对象,并不是方法结束后就直接被回收了,直接回收的话,jvm压力很大的,所以是异步回收

当堆内存不够了,就会抛出OutOfMemoryError异常

下面使用实际代码测试结果

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.java.test;
 
import java.util.ArrayList;
 
/**
 * @Description:
 * @Author: qiuxie
 * @Create: 2023/5/7 23:52
 */
public class JvmTest {
 
    /**
     * jvm堆内存相关
     * -Xmx20M -Xms5M
     * @param args
     */
    public static void main(String[] args) {
        //创建数据分配内存
        //int[] a=new int[3*1024*1024];
        //a[0]=12345;
        System.out.print("Xmx=");
        System.out.println(Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M");
        System.out.print("free mem=");
        System.out.println(Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M");
        System.out.print("total mem=");
        System.out.println(Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M");
    }
 
}

  

1
2
设置的堆内存大小
-Xmx20M -Xms5M

 

 不同的jdk版本中,堆中的包含也是不一样的

在jdk 1.7中

报错部分可忽略

 

 而在jdk 1.8中

只有青年代和老年代了

1
-XX:+PrintGCDetails

  

 

 jdk 11的堆空间信息

 

 相比较jdk 1.8,少了很多

 以上就是关于java堆的简单介绍

 

posted @   不忘初心2021  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示