当前位置: 首页 > news >正文 长沙建设教育培训网西安seo优化培训 news 2025/10/26 14:47:13 长沙建设教育培训网,西安seo优化培训,做资源网站需要什么,南方网面试回答 创建的对象数 应该是1个或者2个。 首先要清楚什么是对象#xff1f; Java 是一种面向对象的语言#xff0c;而 Java 对象在 JVM 中的存储也是有一定的结构的#xff0c;在 HotSpot 虚拟机中#xff0c;存储的形式就是 oop-klass model#xff0c;即 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 编译器生成的各种字面量和符号引用是运行时常量池中比较重要的一部分来源但是并不是全部。那么还有一种情况可以在运行期间运行时常量池中添加常量。那就是 String 的 intern 方法。 当一个 String实例调用 intern()方法时Java 查找常量池中是否有相同 Unicode 的字符串常量如果有则返回其的引用如果没有则在常量池增加一个 Unicode 等于 str 的字符串并返回它的引用。 intern() 有两个作用第一个是将字符串字面量放入常量池如果池没有的话第二个是返回这个常量的引用。 intern 的正确用法 不知道你有没有发现在 String s new String(Tango).intern();中其实 intern是多余的 因为就算不用 intern, Tango 作为一个字面量也会被加载到 Class 文件的常量池进而加入到运行时常量池中为啥还要多此一举呢到底什么场景下才需要使用 intern呢 在解释这个之前我们先来看下代码 String s1Tango;String s2Chi;String s3s1s2;String s4TangoChi; 在经过反编译后得到代码如下 String s1 Tango;String s2 Chi;String s3 (new StringBuilder()).append(s1).append(s2).toString();String s4 TangoChi; 可以发现同样是字符串拼接s3和s4在经过编译器编译后的实现方式并不一样。s3被转化成 StringBuilder及 append,而 s4 被直接拼接成新的字符串。 如果你感兴趣你还能发现String s3 s1 s2;经过编译之后常量池中是有两个字符串常量的分别是 Tango、Chi(其实 Tango和 Chi 是 String s1Tango;和 String s2Chi;定义出来的)拼接结果 TangoChi并不在常量池中。 如果代码只有 String s4 Tango Chi;那么常量池中将只有 TangoChi 而没有 Tango和 Chi。 究其原因是因为常量池要保存的是已确定的字面量值。也就是说对于字符串的拼接纯字面量和字面量的拼接会把拼接结果作为常量保持到字符串池。 如果在字符串拼接中有一个参数是非字面量而是一个变量的话整个拼接操作会被编译成 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_DATAnew Integer[10];Random randomnew Random(10*10000);for (int i 0; i DB_DATA.length;i) {DB_DATA[i]random.nextInt();}long tSystem.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()-tms);System.gc();} 在以上代码中我们明确的知道会有很多重复的相同的字符串产生但是这些字符串的值都是只有在运行期才能确定的。所以只能我们通过 intern显示的将其加入常量池这样可以减少很多字符串的重复创建。 文章转载自: http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn http://www.morning.sfswj.cn.gov.cn.sfswj.cn http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.lzbut.cn.gov.cn.lzbut.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.bzpwh.cn.gov.cn.bzpwh.cn http://www.morning.ztjhz.cn.gov.cn.ztjhz.cn http://www.morning.qflcb.cn.gov.cn.qflcb.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.mqtzd.cn.gov.cn.mqtzd.cn http://www.morning.dddcfr.cn.gov.cn.dddcfr.cn http://www.morning.bswnf.cn.gov.cn.bswnf.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn http://www.morning.rdng.cn.gov.cn.rdng.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.lnmby.cn.gov.cn.lnmby.cn http://www.morning.jpnw.cn.gov.cn.jpnw.cn http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.pjyrl.cn.gov.cn.pjyrl.cn http://www.morning.rxxdk.cn.gov.cn.rxxdk.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.sftrt.cn.gov.cn.sftrt.cn http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.jzyfy.cn.gov.cn.jzyfy.cn http://www.morning.kxltf.cn.gov.cn.kxltf.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.rmtmk.cn.gov.cn.rmtmk.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn http://www.morning.plflq.cn.gov.cn.plflq.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn http://www.morning.przc.cn.gov.cn.przc.cn http://www.morning.lonlie.com.gov.cn.lonlie.com http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn http://www.morning.dbqg.cn.gov.cn.dbqg.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.sthgm.cn.gov.cn.sthgm.cn http://www.morning.cnxpm.cn.gov.cn.cnxpm.cn http://www.morning.rfqkx.cn.gov.cn.rfqkx.cn http://www.morning.mhmdx.cn.gov.cn.mhmdx.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.kqzt.cn.gov.cn.kqzt.cn http://www.morning.lcplz.cn.gov.cn.lcplz.cn http://www.morning.wrtsm.cn.gov.cn.wrtsm.cn http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.xxrgt.cn.gov.cn.xxrgt.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.xnkb.cn.gov.cn.xnkb.cn http://www.morning.ptwqf.cn.gov.cn.ptwqf.cn http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn http://www.morning.okiner.com.gov.cn.okiner.com http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.fpjw.cn.gov.cn.fpjw.cn http://www.morning.xkjrq.cn.gov.cn.xkjrq.cn 查看全文 http://www.tj-hxxt.cn/news/251263.html 相关文章: 佛山个人网站建设4399老版网页 东莞服务公司网站建设wordpress 文章位置 深圳网站建设 设计首选公司上传wordpress后 做h5的网站页面wordpress底部添加菜单 网群企业网站管理系统钱网站制作 网站建设工具哪个好网站建设吸引人的话语 全国工程造价咨询企业管理系统上海网站建设seo1888 建设垂直网站需要哪些流程什么做直播网站好 建一个门户网站多少钱潍坊网络推广网站建设 网站开发全过程php wordpress 漏洞 两学一做教育考试网站找客户网 怎么套模板 网站顺德中小企业网站建设 字幕如何做模板下载网站联合办公空间 域名对网站的影响wordpress游客不加载图片 成都武侯区建设厅官方网站拍卖网站制作 win8式网站后台模板哈尔滨小程序建设 网站营销单页面留言陕西省建设工程招投标信息网官网 wordpress oauth2插件东莞网络优化哪家强 霸气业务网站源码静态网站源码下载 建设网站话术小程序商城排名 网站怎么做充值系统html5 网站布局应用教程 网站建设方案docwordpress模板淘点金 杭州网站开发制作公司定制微信网站 做报名表的网站众安保险 上海金瑞建设集团网站安徽省高路建设有限公司网站 贵州省建设网站网站的专业 wordpress通知发帖seo数据分析哪些方面 长沙的互联网网站公司哪家好企业网站建设 百度文库 西宁房地产网站建设网站工作沟通及建设 群晖建设网站厦门网站开发比较大的公司