jvm 运行时数据区、String 常量池

1 篇文章 0 订阅
私有 
- 程序计数器:记录当前线程所执行字节码的行号指示器 

- 虚拟机栈:存放了当前线程调用方法的局部变量表、操作数栈、动态链接、方法返回值等信息(可以理解为线程
的栈) 

- 本地方法栈:为虚拟机使用的Native方法提供服务

共享 
- Java堆:占据了虚拟机管理内存中最大的一块,唯一目的就是存放对象实例,也是垃圾回收器主要管理的地方,故又称GC堆

- 方法区:存储加载的类信息、常量区、静态变量、JIT(即时编译器)处理后的数据等,类的信息包含类的版
本、字段、方法、接口等信息。需要注意是常量池就在方法区中,也是我们这次需要关注的地方

String常量池随JDK的改变

JDK1.7中JVM把String常量区从方法区中移除了;JDK1.8中JVM把String常量池移入了堆中,同时取消了“永久
代”,改用元空间代替(Metaspace)

String.intern()

检查字符串常量池中是否存在String,如果存在返回池里的字符串引用;若池中不存在,则将其加入池中,并返回其引用。 

这样做主要是为了避免在堆中不断地创建新的字符串对象

对于直接做+运算的两个字符串(字面量)常量,并不会放入String常量池中,而是直接把运算后的结果放入常
量池中

对于先声明的字符串字面量常量,会放入常量池,但是若使用字面量的引用进行运算就不会把运算后的结果放入常量池中了

JVM会对String常量的运算进行优化:未声明的,只放结果;已经声明的,只放声明

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DQchat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值