JVM那些事儿-堆内存(三)

2022-03-24  本文已影响0人  久伴我还是酒伴我

简介

对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。


image.png

堆结构

image.png

堆内存大小

初始堆大小为系统内存64/1,堆内存最大为系统内存4/1;
具体可以参考该代码

        long initialHeapSize = Runtime.getRuntime().totalMemory();

        long maxHeapSize = Runtime.getRuntime().maxMemory();
        // 初始堆大小
        System.out.println("-Xms = " + initialHeapSize / 1024 + "kb or " + initialHeapSize / 1024 / 1024 + "mb");
      // 最大堆内存
        System.out.println("-Xmx = " + maxHeapSize / 1024 + "kb or " + maxHeapSize / 1024 / 1024 + "mb");

最好初始化堆大小和最大内存设置一致

控制参数

-Xms设置堆的最小空间大小。

-Xmx设置堆的最大空间大小。

-XX:NewSize设置新生代最小空间大小。

-XX:MaxNewSize设置新生代最大空间大小。

-XX:PermSize设置永久代最小空间大小。

-XX:MaxPermSize设置永久代最大空间大小。

-Xss设置每个线程的堆栈大小。

没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。

老年代空间大小=堆空间大小-年轻代大空间大小

上一篇 下一篇

猜你喜欢

热点阅读