一、java1.8堆内存基本情況


java1.8之後將最初的永久代取消了,由元空間取代。

在java8中,永久代已經被移除,被元空間取代。元空间本质和永久代类似。

元空间(java8)与永久代(java7)之间最大的区别在于:

永久代使用的是JVM堆内存,但是java8以后的元空间并不在虚拟机中,而是使用本机物理内存。

因此,默认情况下,元空间大小受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆,这样可以加载多少类的元数据就不再由MaxPermSize控制,而是由系统实际可用空间决定。

二、堆内存初始大小

package com.lxk.jvm;
/**
 * -Xms 堆内存初始大小,默认内存大小:系统64/1
 * -Xmx 堆内存最大值,默认内存大小:系统4/1
 * -Xmn 堆内存年轻代大小
 */
public class InitailHeapSizeDemo {
    public static void main(String[] args) {
        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");
    }
}

程序执行结果如下:初始堆大小为系统内存64/1,堆内存最大为系统内存4/1。

测试结果:

-Xms = 247296kb or 241mb
-Xmx = 3655680kb or 3570mb

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐