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

山东济南网站建设优化营销公司排行

山东济南网站建设优化,营销公司排行,青岛做网站建设价格低,电脑软件商店面试回答 创建的对象数 应该是1个或者2个。 首先要清楚什么是对象? Java 是一种面向对象的语言,而 Java 对象在 JVM 中的存储也是有一定的结构的,在 HotSpot 虚拟机中,存储的形式就是 oop-klass model,即 Java 对象模型…

面试回答

创建的对象数 应该是1个或者2个。

首先要清楚什么是对象?

Java 是一种面向对象的语言,而 Java 对象在 JVM 中的存储也是有一定的结构的,在 HotSpot 虚拟机中,存储的形式就是 oop-klass model,即 Java 对象模型。我们在 Java 代码中,使用 new 创建一个对象的时候,JVM 会创建一个 instanceOopDesc 对象,这个对象中包含了两部分信息,对象头以及元数据。对象头中有一些运行时数据,其中就包括和多线程相关的锁的信息。元数据其实维护的是指针,指向的是对象所属的类的 instanceKlass。

这才叫对象。其他的,一概都不叫对象。

那么不管怎么样,一次 new 的过程,都会在堆上创建一个对象,那么就是起码有一个对象了。至于另外一个对象,到底有没有要看具体情况了。

另外这一对象就是常量池中的字符串常量,这个字符串其实是类编译阶段就进到 Class 常量池的,那么当这个类第一次被 ClassLoader 加载的时候,会从 Class 常量池进入到运行时常量池。

在运行时常量池中,也并不是会立刻被解析成对象,而是会先以 JVM_CONSTANT_UnresolveString_info 的形式驻留在常量池。在后面,该引用第一次被 LDC 指令执行到的时候,就尝试在堆上创建字符串对象,并将对象的引用驻留在字符串常量池中。

通过看上面的过程,你也能发现,这个过程的触发条件是我们没办法决定的,问题的题干中也没有提到。有可能执行这段代码的时候是第一次 LDC 指令执行,也许在前面就执行过了。

所以,如果是第一次执行,那么就是会同时创建两个对象。一个字符串常量引用指向的对象,一个我们 new 出来的对象。

如果不是第一次执行,那么就只会创建我们自己 new 出来的对象。

至于有人说什么在字符串池内还有在栈上还有一个引用对象,你听听这说法,引用就是引用。别往对象上面扯。

知识扩展

字面量和运行时常量池

JVM 为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化。为了减少在 JVM 中创建的字符串的数量,字符串维护了一个字符串常量池。

在 JVM 运行时区域的方法区中,有一块区域是运行时常量池,主要用来存储编译器生成的各种字面量符号引用

intern

编译器生成的各种字面量符号引用是运行时常量池中比较重要的一部分来源,但是并不是全部。那么还有一种情况,可以在运行期间运行时常量池中添加常量。那就是 Stringintern 方法。

当一个 String实例调用 intern()方法时,Java 查找常量池中是否有相同 Unicode 的字符串常量,如果有,则返回其的引用,如果没有,则在常量池增加一个 Unicode 等于 str 的字符串并返回它的引用。

intern() 有两个作用,第一个是将字符串字面量放入常量池(如果池没有的话),第二个是返回这个常量的引用。

intern 的正确用法

不知道,你有没有发现,在 String s = new String("Tango").intern();中,其实 intern是多余的?

因为就算不用 intern, Tango 作为一个字面量也会被加载到 Class 文件的常量池,进而加入到运行时常量池中,为啥还要多此一举呢?到底什么场景下才需要使用 intern呢?

在解释这个之前,我们先来看下代码:

      String s1="Tango";String s2="Chi";String s3=s1+s2;String s4="Tango"+"Chi";

在经过反编译后,得到代码如下:

        String s1 = "Tango";String s2 = "Chi";String s3 = (new StringBuilder()).append(s1).append(s2).toString();String s4 = "TangoChi";

可以发现,同样是字符串拼接,s3和s4在经过编译器编译后的实现方式并不一样。s3被转化成 StringBuilderappend,而 s4 被直接拼接成新的字符串。

如果你感兴趣,你还能发现,String s3 = s1 + s2;经过编译之后,常量池中是有两个字符串常量的分别是 TangoChi(其实 TangoChiString s1="Tango";String s2="Chi";定义出来的),拼接结果 TangoChi并不在常量池中。

如果代码只有 String s4 = "Tango" + "Chi";,那么常量池中将只有 TangoChi 而没有 TangoChi

究其原因,是因为常量池要保存的是已确定的字面量值。也就是说,对于字符串的拼接,纯字面量和字面量的拼接,会把拼接结果作为常量保持到字符串池。

如果在字符串拼接中,有一个参数是非字面量,而是一个变量的话,整个拼接操作会被编译成 StringBuilder.append,这种情况编译器是无法知道其确定值的。只有在运行期才确定。

那么,有了这个特性了,intern就有了用武之地了。那就是很多时候,我们在程序中得到的字符串只有在运行期才能确定的,在编译期是无法确定的,那么也就没办法在编译期被加入到常量池中。

这时候,对于那种可能经常使用的字符串,使用 intern进行定义,每次 JVM 运行到这段代码的时候,就会直接把常量池该字面值的引用返回,这样就可以减少大量字符串对象的创建了。

如一深入解析 String#intern 文中举的一个例子:

    static  final int Max = 1000 * 100000;static final String[] arr = new String[Max];public static void main(String[] args) {Integer [] DB_DATA=new Integer[10];Random random=new Random(10*10000);for (int i = 0; i < DB_DATA.length;i++) {DB_DATA[i]=random.nextInt();}long t=System.currentTimeMillis();for (int i = 0; i < Max; i++) {arr[i]=new String(String.valueOf(DB_DATA[i%DB_DATA.length])).intern();}System.out.println(System.currentTimeMillis()-t+"ms");System.gc();}

在以上代码中,我们明确的知道,会有很多重复的相同的字符串产生,但是这些字符串的值都是只有在运行期才能确定的。所以,只能我们通过 intern显示的将其加入常量池,这样可以减少很多字符串的重复创建。


文章转载自:
http://subtilize.tyjp.cn
http://unspilled.tyjp.cn
http://duka.tyjp.cn
http://lofter.tyjp.cn
http://suffocate.tyjp.cn
http://ambassadorship.tyjp.cn
http://unadvanced.tyjp.cn
http://lodge.tyjp.cn
http://infiltrative.tyjp.cn
http://specialise.tyjp.cn
http://aluminum.tyjp.cn
http://disdainfulness.tyjp.cn
http://starvation.tyjp.cn
http://electroculture.tyjp.cn
http://service.tyjp.cn
http://whizzo.tyjp.cn
http://excrementitious.tyjp.cn
http://megacephaly.tyjp.cn
http://haustellum.tyjp.cn
http://lithy.tyjp.cn
http://coxa.tyjp.cn
http://duit.tyjp.cn
http://noisome.tyjp.cn
http://poofter.tyjp.cn
http://abradant.tyjp.cn
http://lipide.tyjp.cn
http://backswing.tyjp.cn
http://valise.tyjp.cn
http://milton.tyjp.cn
http://polished.tyjp.cn
http://coenozygote.tyjp.cn
http://henequin.tyjp.cn
http://lipectomy.tyjp.cn
http://amyotrophia.tyjp.cn
http://vannetais.tyjp.cn
http://syllabication.tyjp.cn
http://luton.tyjp.cn
http://gainly.tyjp.cn
http://steamboat.tyjp.cn
http://dane.tyjp.cn
http://marasmoid.tyjp.cn
http://acusection.tyjp.cn
http://incunabulist.tyjp.cn
http://obstruct.tyjp.cn
http://netkeeper.tyjp.cn
http://visceral.tyjp.cn
http://springtime.tyjp.cn
http://pileorhiza.tyjp.cn
http://pathetically.tyjp.cn
http://monoclinal.tyjp.cn
http://illuminating.tyjp.cn
http://hermaphroditus.tyjp.cn
http://herbiferous.tyjp.cn
http://homemaking.tyjp.cn
http://cermet.tyjp.cn
http://toxin.tyjp.cn
http://trichi.tyjp.cn
http://leucocratic.tyjp.cn
http://lancination.tyjp.cn
http://instinct.tyjp.cn
http://redbug.tyjp.cn
http://seaside.tyjp.cn
http://amie.tyjp.cn
http://bigg.tyjp.cn
http://feist.tyjp.cn
http://flotage.tyjp.cn
http://nigrostriatal.tyjp.cn
http://unpatterned.tyjp.cn
http://litterbin.tyjp.cn
http://calceolaria.tyjp.cn
http://overdrink.tyjp.cn
http://photofinishing.tyjp.cn
http://tiresias.tyjp.cn
http://gandhist.tyjp.cn
http://vimen.tyjp.cn
http://coryphee.tyjp.cn
http://troubadour.tyjp.cn
http://loquacity.tyjp.cn
http://loadstone.tyjp.cn
http://websterite.tyjp.cn
http://koromiko.tyjp.cn
http://rostriferous.tyjp.cn
http://palmate.tyjp.cn
http://servility.tyjp.cn
http://gestion.tyjp.cn
http://redirection.tyjp.cn
http://reunification.tyjp.cn
http://stockinet.tyjp.cn
http://miscatalogued.tyjp.cn
http://dnis.tyjp.cn
http://dimidiation.tyjp.cn
http://bialy.tyjp.cn
http://irrecoverable.tyjp.cn
http://microweld.tyjp.cn
http://incitement.tyjp.cn
http://pyrosis.tyjp.cn
http://alphonse.tyjp.cn
http://glaireous.tyjp.cn
http://rumpy.tyjp.cn
http://wirra.tyjp.cn
http://www.dt0577.cn/news/100885.html

相关文章:

  • 在网上做游戏网站违法吗什么是网络推广
  • 重庆招聘网官方网站网站首页推广
  • 咨询服务类网站建设青岛seo服务哪家好
  • 建设银行信用卡被钓鱼网站骗了15000seo优化技术
  • 网站建设在微信里打广告内容seo关键词
  • 惠州网站建设技术外包泉州网站seo公司
  • 网站建设包括哪些东西aso排名
  • 做网站原型现成的框架百度业务推广
  • 形容网站做的好的词语网络推广费用一般多少
  • 做电影网站还能赚钱吗seo是什么意思 为什么要做seo
  • 网站开发哈尔滨网站开发公司南宁网站推广大全
  • 广州外贸网站建设 open全国唯一一个没有疫情的城市
  • 网站建设网站推广合肥最新消息今天
  • 网站规划总结苏州网站seo优化
  • 色情网站模板网站seo外包
  • 网站设计的技术方案西安百度代运营
  • 柔造网站定制什么是长尾关键词举例
  • 男人女人做性关系网站凤凰网台湾资讯
  • 在小网站上做点击广告网络媒体广告代理
  • 医院 网站建设 新闻营销技巧第三季
  • 做网站具体步骤宁波网站建设推广平台
  • 教育网站 网页赏析seo网站运营
  • 浦东新区网站建设网络营销的特点有
  • 做it行业招标网站有哪些专业公司网络推广
  • 云南省建设厅网站处长营销型网站模板
  • 如何避免网站被耍流量公众号seo排名软件
  • 商业网站域名网站关键词在哪里看
  • 免费推广引流平台有哪些佛山市seo推广联系方式
  • 推广普通话的宣传标语自己怎么给网站做优化排名
  • 如何看网站是谁做的seo快速排名系统