【Java】jvm 元空间、常量池(了解)

  1. JDK1.8 以前的 HotSpot JVM 有方法区,也叫永久代(permanent generation)
  2. 方法区用于存放已被虚拟机加载的类信息,常量、静态遍历,即编译器编译后的代码
  3. JDK1.7 开始了方法区的部分移除:符号引用(Symbols)移至 native heap,字面量(interned strings)和静态遍历(class statics)移至 java heap

常量池:

字面量(Literal)和符合引用(Symbolic References)。

字面量如:文本字符串、final常量值等,

符号引用包含下面3类:

  • 类和接口的权限定名
  • 字段的名称和描述符
  • 方法的名称和描述符

字符串常量池

JDK1.7之前字符串常量池存放在方法区中;

JDK1.7开始字符串常量池存放在堆中;

javap -p -v Test08.class


【Java】jvm 元空间、常量池(了解)_第1张图片


【Java】jvm 元空间、常量池(了解)_第2张图片


示例代码

package com.api.Demo07;

public class Test08 {
    public static void main(String[] args) {
        /**
         * java 元空间
         * 1. JDK1.8 之前的称作 方法区/永久代,存放 静态变量、calss信息,改名——元空间
         * 2. JDK1.7 开始将 字符串常量池 从方法区 改为 堆中存放
         */
        /**
         * 常量池——表格形式
         * #0   str
         * #1   String
         * #2   mayikt
         *
         * 上面这些形成后称为——运行常量池
         * 通过反汇编  查看常量池
         * javap -p -v Test.class
         */
        String str = "mayikt";
        System.out.println(str);
    }
}

反编译 查看String常量池 

【Java】jvm 元空间、常量池(了解)_第3张图片


下一篇文章:Math 类

你可能感兴趣的:(java,jvm,开发语言,String,常量池,元空间)