zoukankan      html  css  js  c++  java
  • 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+"	");
            }
    
        }
    }

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

  • 相关阅读:
    java笔记6 Java语言基本类; String和StringBuffer ;集合类;流,文件及文本应用:JDBC
    java笔记5
    java笔记4 异常处理
    java笔记3
    java课笔记2
    java课笔记1
    TEXT
    机器学习
    WordCountPro
    WCProject(java)
  • 原文地址:https://www.cnblogs.com/qfdy123/p/14336271.html
Copyright © 2011-2022 走看看