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

北京网站优化厂家yangdesign工业设计公司

北京网站优化厂家,yangdesign工业设计公司,城市生活服务app下载,美食网站建设规划书需求分析这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先#xff0c;我们来看下面的这段程序#xff0c;请思考最终的输出结果。 输出结果#xff…这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先我们来看下面的这段程序请思考最终的输出结果。 输出结果 解释 首先我们的程序会被JDK中的编译器编译成java的二进制字节码文件然后通过类加载器将其加载到JVM的内存的栈中其中会生成一个常量池就是一张常量池表里面放在这个类编译后的各种字面量和符号注意此时常量池中只存储了这些字面量的符号没有生成具体对象。举个例子来说就比如第7行的a它在常量池中可能就是用一个符号25来表示的没有具体的String类型的变量a也不会开辟新的空间来存储a。然后根据程序计数器来一步一步的运行该程序。当执行到这一行常量池中的信息会被加载到运行时常量池中常量池中原本记录的符号也会变为真实的地址即符号25变为地址25并且会在堆中开辟一块空间存储String类型的变量a这块开辟的空间就称为串池即字符串常量池即StringTable它在堆中其中里面一开始时是空的当运行到这一行时会把a放入里面a的地址为25假设的。这就是整体的流程。然后就是依次在串池中放入b和ab。当执行到第10行时它创建的是一个StringBuild对象放入s1的值即a然后调用StringBuilder的方法进行字符串拼接。然后再创建一个新的String对象里面放的就是拼接后的结果即ab很明显s4中的ab是在堆中的而符号判断的是两个对象的地址是否相等所以很明显第14行输出false。当程序运行到第11行时jvm会先在串池中找是否有ab找到了那么就不再创建新的对象了就直接把这个ab的地址赋予s5所以第15行输出true。下面再看第9行这种字符常量相加的是直接相加的没有创建对象调用方法。所以最后相加的结果就直接放在运行时常量池的串池中所以第14行输出false第15行输出true。对比着看第9行和第10行第9行javac在编译时进行了优化因为第9行是两个字符常量相加的最终的结果是一定的不会变的所以就直接加然后放到串池中。而第10行是因为这是两个变量相加不确定最后的结果所以就使用了StringBuilder类对象来进行操作。多说一句字符串还具有延迟实例化的特点具体来说就是在编译结束后不会直接实例化该字符串直到代码运行到这一句的时候才会实例化出具体的字符串并放入内存中。 下面再来看一下第12行第12行调用了intern方法。这个方法的作用是主动将串池中还没有的字符串对象放入串池。第12行是s4调用了intern方法的我们知道s4的引用是指向堆内存中的ab的s4调用这个方法jvm会先看运行时常量池中有没有ab这个字符对象如果没有那么就把堆中的ab放入到运行时常量池中注意放入后堆中就没有这个ab了如果jvm发现运行时常量池中有这个ab对象那么就直接把s6的引用指向它。这就是intern的作用。 这里关联一下字符串的不可变性字符串的不可变性是一个引用多个对象而这里将的是多个引用一个对象不是一个对象仅仅是值相等而已 2.StringTable的特性 下面看一下StringTable的特性 常量池中的字符串仅是符号第一次用到时才变为对象利用串池的机制可以避免重复创建字符串对象字符串变量拼接的原理是StringBuilder (1.8)字符串常量拼接的原理是编译期优化可以使用intern方法主动将串池中还没有的字符串对象放入串池 注意在jdk1.8以后intern方法是把堆中对象的值挪到串池中1.8以前是将堆中的值复制一份然后放到串池中。这一点需要注意。 3.StringTable的位置 下面来看一下StringTable的位置如下图所示 如图所示在jdk1.8以后StringTable就在堆中了。StringTable就是字符串常量池 4.StringTable的垃圾回收、 这里我们只需要了解StringTable是可以进行垃圾回收的具体是怎么回收的我们后面将GC的时候会具体的讲这里就不多说了。 5.StringTable性能调优 StringTable的底层的哈希表StringTable进行性能调优就是要调整哈希表。 性能调优的方法 调整 -XX:StringTableSize桶个数考虑将字符串对象是否入池 6.总结 这篇文章我们主要讲解了StringTable。下面总结一下。 StringTable即字符串常量池是存储字符串对象用的在堆中。一个字符串在被编译后是不会创建对象的仅仅只会在常量池中存储一个符号只有当运行到这行代码的时候才会在字符串常量池中创建对象这就是字符串的懒加载也是延迟加载。然后在字符串常量池中也可以避免创建重复的对象。即如果StringTable中已经有了该对象那么如果再有引用需要创建相同值的对象的时候该引用会直接指向这个对象就避免了重复创建。StringTable还可以进行垃圾回收。还讲述了StringTable的性能调优的两点策略。这就是本篇文章的所有内容。
http://www.zqtcl.cn/news/151727/

相关文章:

  • 怎么查看一个网站页面的seo优化情况网站建站建设首选上海黔文信息科技有限公司2
  • 威海网站建设价格深圳优美网络科技有限公司
  • 做网站用什么系统建设网站投资多少
  • 凡科建站官网 网络服务抚顺 网站建设
  • 学校网站的建设方案西安企业seo外包服务公司
  • 建设租车网站深圳ww
  • 推广网络网站潜江资讯网一手机版
  • 凡科网站自己如何做毕设 做网站
  • 一起做网站逛市场百度权重查询网站
  • 专业网站优化推广网站核查怎么抽查
  • 牡丹江站salong wordpress
  • 网站建设公司做网站要多少费用有哪些外国网站国内可以登录的
  • 天津建站平台网页制作免费的素材网站
  • 建设网站需要专业哪个企业提供电子商务网站建设外包
  • 公司网站建设及维护网站建设思维
  • 那个网站可以学做西餐17做网站广州沙河
  • 品牌网站建设哪里好京东网站建设案例
  • 亚马逊海外版网站深圳市工商注册信息查询网站
  • 新乐做网站优化网站上漂亮的甘特图是怎么做的
  • 新网站应该怎么做seo品牌推广方案思维导图
  • 想要网站导航推广页浅谈中兴电子商务网站建设
  • 免费引流在线推广成都网站优化费用
  • 老河口市网站佛山市点精网络科技有限公司
  • word模板免费网站seo引擎优化是做什么的
  • 办网站怎么赚钱鄠邑建站 网站建设
  • 宜春网站建设推广微信小程序开发
  • 巴南城乡建设网站免费网站建设软件大全
  • 湖南网站建设公公司没有自己的网站
  • 刚建设的网站如何推广网站恢复正常
  • 怎么做制作网站的教程永久免费空间免备案