当前位置: 首页 > news >正文

唐县住房和城乡建设局网站全球包装设计网

唐县住房和城乡建设局网站,全球包装设计网,自己做装修效果的网站,手机网站怎么备案文章目录 Class常量池运行时常量池String常量池基本类型常量池Integer 常量池Long 常量池 加餐部分 Class常量池 每个Class字节码文件中包含类常量池用来存放字面量以及符号引用等信息。 运行时常量池 java文件被编译成class文件之后,也就是会生成我上面所说的 …

文章目录

  • Class常量池
  • 运行时常量池
  • String常量池
  • 基本类型常量池
    • Integer 常量池
    • Long 常量池
  • 加餐部分

Class常量池

每个Class字节码文件中包含类常量池用来存放字面量以及符号引用等信息。
在这里插入图片描述

运行时常量池

java文件被编译成class文件之后,也就是会生成我上面所说的 class常量池,那么运行时常量池又是什么时候产生的呢?

jvm在执行某个类的时候,必须经过加载、连接、初始化,而连接又包括验证、准备、解析三个阶段。而当类加载到内存中后,jvm就会将 class常量池 中的内容存放到 运行时常量池 中。

在上面我也说了,class常量池 中存的是字面量和符号引用,也就是说他们存的并不是对象的实例,而是对象的符号引用值。而经过解析(resolve)之后,也就是把符号引用替换为直接引用。

运行时常量池区域是在方法区中。

String常量池

在JDK1.7后String常量池的所在区域被挪至堆内存中,原位置是在运行时常量池中,而在JDK1.7后JDK在堆内开辟了一块空间用作了String常量池。

String name="zhangsan";
String nameTwo=new String("lisi");

上述两行代码中“zhangsan”字面量是存储在String常量池中,而“lisi”则是在String常量池以及堆中各有一份,使用nameTwo时获取lisi时也是从堆中获取。
在这里插入图片描述

基本类型常量池

基本类型的常量池更偏向于缓存的概念,每个基本类型的包装类都有对应的内部缓存类,若发现所需数据已完成缓存则直接从缓存对象的cache数组中获取。整数、字符类型的最大缓存值为127而最小缓存值为-128,浮点型没有缓存。

private static class IntegerCache {static final int low = -128;static final int high;static final Integer cache[];static {// high value may be configured by propertyint h = 127;String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if (integerCacheHighPropValue != null) {try {int i = parseInt(integerCacheHighPropValue);i = Math.max(i, 127);// Maximum array size is Integer.MAX_VALUEh = Math.min(i, Integer.MAX_VALUE - (-low) -1);} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.}}high = h;cache = new Integer[(high - low) + 1];int j = low;for(int k = 0; k < cache.length; k++)cache[k] = new Integer(j++);// range [-128, 127] must be interned (JLS7 5.1.7)assert IntegerCache.high >= 127;}private IntegerCache() {}}

Integer 常量池

当发现所需的值小于最小缓存值并且大于最大缓存值后,则直接创建新的对象

public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}

Long 常量池

当发现所需的值小于最小缓存值并且大于最大缓存值后,则直接创建新的对象

public static Long valueOf(long l) {final int offset = 128;if (l >= -128 && l <= 127) { // will cachereturn LongCache.cache[(int)l + offset];}return new Long(l);}

加餐部分

String intern方法

    String hello=new String("he")+new String("llo");String helloTwo=hello.intern();System.out.println(helloTwo==hello);

JDK1.6
在这里插入图片描述

JDK1.6intern方法:变量hello调用intern方法,首先会去String常量池中找是否有hello这个常量,当发现未找到时则把堆中的hello对象的“hello”复制到String常量池,若发现String常量池中有“hello”时则会将常量池中的“hello”返回给helloTwo。

如上图所示在JDK1.6的时候intern方法在调用后,发现未找到时则把堆中的hello对象的“hello”复制到String常量池。

JDK1.7在这里插入图片描述
JDK1.7 intern方法:变量hello调用intern方法,首先会去String常量池中找是否有hello这个常量,当发现未找到时则把堆中的hello对象地址值存入到String常量池,若发现String常量池中有“hello”时则会将常量池中的“hello”返回给helloTwo。

http://www.yayakq.cn/news/769195/

相关文章:

  • 阜新市建设小学网站唐山seo推广公司
  • 阿里巴巴国际站运营模式地产项目网站建设ppt
  • 做湲兔费网站视颍计算机专业毕业设计做什么好
  • wordpress 一键脚本谷歌seo优化技巧
  • 网页设计个人网站汽车商城网站模板免费下载
  • 公司做网站需要什么内容WordPress中文king主题
  • js模拟点击网站的按钮社区类网站有哪些
  • 网站视频站建设教程和企业网站一定要花钱吗
  • 网站开发的评论界面模板规划设计公司资质要求
  • Soho外贸常用网站怎么用代码创建网站教程
  • 做网站图片大小临沂设计网站的公司
  • 示范建设验收网站企业为什么要分析环境
  • 哈尔滨seo关键词排名东莞seo计费管理
  • 我做百度_上面有手机网站的_为什么还要做手机网站腾讯科技微信小程序
  • 给我一个网站贴吧石家庄网站优化多少钱
  • 一起做网店网站入驻收费wordpress文章关键字怎么添加
  • html5网站源代码下载wordpress 首页模板修改
  • 那个网站做外贸最好销售 网站
  • dedecms网站首页绍兴金圣建设有限公司网站
  • 网站上设置返回首页的超链接咋做的沈阳网站建设公司多少钱
  • 如何破解WordPress网站12个优秀平面设计素材网站
  • 网站空间数据库使用深圳市建设工程合同备案网站
  • 如何做网站编辑兰州网络推广执行
  • 宁波网站seowordpress视频教育主题
  • 网站基础风格创建wordpress设置手机浏览
  • 城阳网站建设公司电话python语言特点
  • 家具技术支持东莞网站建设网站建设 响应式 北京
  • 网站询盘量耒阳做网站
  • 课程培训网站模板下载网站开发需要什么工具
  • 网站开发中系统部署与维护要求逸阳网站建设的目标