zoukankan      html  css  js  c++  java
  • 字符串 & 堆 & 方法区

    字符串 & 堆 & 方法区

    1. 问题引入

    package com.learn.java;
    
    /**
     * @author xzy
     * @date 2020-09-17 22:33
     * 说明:字符串 & 堆 & 方法区
     */
    public class Main {
        public static String s = "HELLO WORLD!";
    
        public static void main(String[] args) {
            String s1 = "HELLO WORLD!";
            String s2 = "HELLO WORLD!";
            String s3 = new String("HELLO WORLD!");
    
            System.out.println(s1 == s); // true
            System.out.println(s2 == s); // true
            System.out.println(s1 == s2);// true
            System.out.println(s3 == s); // false
            System.out.println(s3 == s1);// false
            System.out.println(s3 == s2);// false
        }
    }
    

    2.问题分析

    图2.1 Java 虚拟机运行时数据区

    2.1 字符串 & 方法区

    class 文件中有一块被称作“常量池”的区域,常量池可以被视为 class 文件的资源仓库,常量池中主要存放两大类常量:

    • 字面量:字符串、final常量……
    • 符号引用:类/接口的全限定名、字段/方法的名称、字段/方法的描述符

    在方法区有一块被称作“运行时常量池”的区域,当类被加载进 java 虚拟机的内存空间,class 文件常量池中的内容会被加载到运行时常量池。

    图2.2字面量进入方法区的过程

    使用 javap -v Main.class 命令查看程序编译后产生的字节码:

    图2.3 常量池信息

    2.2 字符串 & 堆

    是 java 虚拟机所管理的内存中最大的一块,此内存区域的唯一作用是存放对象实例和数组。

    2.3 总结

    s、s1、s2指向方法区中值为 “Hello WORLD!” 的 String 实例(类加载时创建);s3指向堆中值为 “Hello WORLD!” 的 String 实例(程序运行时创建)。

  • 相关阅读:
    第一章初识java
    初识jQuery
    初识jQuery的案例
    jdk的安装与环境变量的配置
    第六章连接和分组查询
    第五章模糊查询和聚合函数
    第四章数据查询基础
    第三章用sql语句操作数据
    第二章用表组织数据
    第一章数据库系统基础
  • 原文地址:https://www.cnblogs.com/XiaoZhengYu/p/13688562.html
Copyright © 2011-2022 走看看