ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM之堆参数

2021-01-27 18:35:18  阅读:200  来源: 互联网

标签:1024 Java 之堆 str maxMemory totalMemory 参数 内存 JVM


1、Java 7和Java 8区别

Java 7堆结构

JDK 1.8之后将最初的永久代取消了,由元空间取代。

在Java8中,永久代已经被移除,被一个称为元空间的区域所取代。元空间的本质和永久代类似。

元空间与永久代之间最大的区别在于: 永久带使用的JVM的堆内存,但是java8以后的元空间并不在虚拟机中而是使用本机物理内存。 因此,默认情况下,元空间的大小仅受本地内存限制。

类的元数据放入 native memory, 字符串池和类的静态变量放入 java 堆中,这样可以加载多少类的元数据就不再由MaxPermSize 控制, 而由系统的实际可用空间来控制。

2、堆内存

public static void main(String[] args){
long maxMemory = Runtime.getRuntime().maxMemory() ;//返回 Java 虚拟机试图使用的最大内存量。
long totalMemory = Runtime.getRuntime().totalMemory() ;//返回 Java 虚拟机中的内存总量。
System.out.println("MAX_MEMORY = " + maxMemory + "(字节)、" + (maxMemory / (double)1024 / 1024) + "MB");
System.out.println("TOTAL_MEMORY = " + totalMemory + "(字节)、" + (totalMemory / (double)1024 / 1024) + "MB");
}

发现默认的情况下分配的内存是总内存的“1 / 4”、而初始化的内存为“1 / 64”

 

VM参数: -Xms1024m -Xmx1024m -XX:+PrintGCDetails

Java7

Java 8

3、堆内存溢出

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

package com.yanshu;

import java.util.Random;

/**
 * @author :yangyuanyuan
 * @description:TODO
 * @date :2021/1/27 10:22
 */
public class test4 {

    public static void main(String[] args) {

        String str = "hello world" ;
        while(true)
        {
            str += str + new Random().nextInt(88888888) + new Random().nextInt(999999999) ;
           // System.out.println(str+"\t");
        }

    }
}

VM参数:-Xms8m -Xmx8m -XX:+PrintGCDetails

标签:1024,Java,之堆,str,maxMemory,totalMemory,参数,内存,JVM
来源: https://www.cnblogs.com/qfdy123/p/14336271.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有