集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都java培训:JVM-String Tab字符串常量池

发布者: 成都达内     浏览次数:     发布时间:2020-09-04 11:13:07

成都java培训:JVM-String Tab字符串常量池,jdk8及以前使用final char value[]存储,之后改为byte[]...

  String Tab

  1、String基本特性

  final修饰、不可继承

  实现Serializable:可序列化

  实现Comparable:可排序比较大小

  jdk8及以前使用final char value[]存储,之后改为byte[]

  原因:char占两个字节,byte占一个字节,大部分情况下使用的都是拉丁字符(占一个字节)、避免浪费

  字符串常量池中不会存储相同内容的字符串

  String Pool是一个固定大小的HashTable,String过多容易hash冲突、链表过长 、tring.intern性能下降

  设置长度:-XX:StringTableSize

  String Table默认大小1009(jdk6,设置大小无要求),60013(jdk7)、jdk8开始1009是可设置的最小值

  成都java培训:JVM-String Tab字符串常量池

  c如果设置最小值小于1009、报错

  成都java培训:JVM-String Tab字符串常量池

  2、String内存分配

  Java 6及以前,字符串常量池存放在永久代。

  Java 7 中 Oracle 的工程师对字符串池的逻辑做了很大的改变,即将字符串常量池的位置调整到Java堆内。

  所有的字符串都保存在堆(Heap)中,和其他普通对象一样,这样可以让你在进行调优应用时仅需要调整堆大小就可以了。字符串常量池概念原本使用得比较多,但是这个改动使得我们有足够的理由让我们重新考虑在Java7中使用string.intern()。

  Java8元空间,字符串常量在堆

  为什么调整位置?

  3、字符串拼接操作

  1.常量与常量(常量引用,如final修饰的常量)的拼接结果在常量池,原理是编译期优化

  成都java培训:JVM-String Tab字符串常量池

  2.常量池中不会存在相同内容的常量。

  3.只要其中有一个是变量,结果就在堆中。变量拼接的原理是stringBuilder

  成都java培训:JVM-String Tab字符串常量池

  StringBuilder拼接字符串与 ‘+’ 拼接字符串差别

  StringBuild的append方式:

  自始至终只创建一个StringBuilder对象

  优化:可以根据实际情况,给出一个限定值作为参数来创建构造器,避免多次扩容

  ‘+’拼接的方式:

  调用了多少次拼接就创建了多少个StringBulider和String对象、导致内存占用过多,GC需要更多时间

  4.如果拼接的结果调用intern()方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象地址。

  4、intern()使用

  返回的是字符串在常量池中的地址(如果没有该字符串将会加载一个、再返回)

  native方法

  Interned string就是确保字符串在内存里只有一份拷贝,这样可以节约内存空间,加快字符串操作任务的执行速度。注意,这个值会被存放在字符串内部池(String Intern Pool)。

  jdk1.6中,将这个字符串对象尝试放入串池。

  如果串池中有,则并不会放入。返回已有的串池中的对象的地址

  如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址

  Jdk1.7起,将这个字符串对象尝试放入串池。

  如果串池中有,则并不会放入。返回已有的串池中的对象的地址

  如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址

  对于程序中存在大量重复字符串、使用intern方法能够接合适呢个内存空间

  面试题

  new String(“ab”)会创建几个对象?

  答案:两个。一个是通过new关键字在堆空间创建的;另一个是字符串在常量池中的对象

  拓展:new String(“a”)+new String (“b”)呢?

  答案:6个。

  new StringBuilder()

  new String(“a”)

  “a”

  new String(“b”)

  ”b”

  new String(“ab”)

  注意:常量池中并不存在“ab”

  成都java培训:JVM-String Tab字符串常量池

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56