java中字符串常量池、class文件常量池、运行时常量池的区别

本文介绍了Java中的三种常量池:字符串常量池位于方法区,运行时常量池在JVM中经历了从方法区到堆再到元空间的变化,而class文件常量池在编译后存在于每个class文件中。字符串拼接通过编译器优化能减少对象创建,如`"1"+"2"`只创建一个"12"的字符串。每个类加载时,其class文件信息会被解析到运行时常量池。
摘要由CSDN通过智能技术生成

Java有三种常量池,即字符串常量池、class文件常量池、运行时常量池

  • Class常量池:保存类编译生成的字面量和符号引用。Class文件除了类字段,方法,接口描述等,还有Class常量池

  • 运行时常量池: 是JVM的概念,除了存放编译生成字面量和符号引用。还允许运行时产生常量,比如String.intern方法

    • JDK 1.6 中运行时常量池在方法区,而方法区放在内存中的永生代。
    • JDK 1.7中常量池从方法区中移了出来,在Java 堆(Heap)中开辟了一块区域存放运行常量池。
    • JDK1.8 将方法区直接放在一个与堆不相连的本地内存区域,这个区域被叫做元空间。
  • 字符串常量池。String类管理的常量池,处于堆内存中。

1. 字符串常量池——特殊的常量池,存在于方法区(method are), 不是堆

字符串常量池在每个VM中只有一份,他在内存中的位置如图,红色箭头所指向的区域 Interned Strings, 存在于方法区, 不是堆

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值