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

怎么知道网站程序是什么做的重要新闻

怎么知道网站程序是什么做的,重要新闻,2019怎么做网站赚钱,一站式互联网营销平台目录 一、基本概念1.1 说明1.2 特点 二、存放位置2.1 JDK1.6及以前2.2 JDK1.72.3 JDK1.8及以后 三、工作原理3.1 创建字符串常量3.2 使用new关键字创建字符串 四、intern()方法4.1 作用 五、优点六、字节码分析6.1 示例16.1.1 代码示例6.1.2 字节码6.1.3 解析 6.2 示例26.2.1 代…

目录

        • 一、基本概念
          • 1.1 说明
          • 1.2 特点
        • 二、存放位置
          • 2.1 JDK1.6及以前
          • 2.2 JDK1.7
          • 2.3 JDK1.8及以后
        • 三、工作原理
          • 3.1 创建字符串常量
          • 3.2 使用new关键字创建字符串
        • 四、intern()方法
          • 4.1 作用
        • 五、优点
        • 六、字节码分析
          • 6.1 示例1
            • 6.1.1 代码示例
            • 6.1.2 字节码
            • 6.1.3 解析
          • 6.2 示例2
            • 6.2.1 代码示例
            • 6.2.2 分析(jdk8)
          • 6.3 示例3
            • 6.3.1 代码示例
            • 6.2.2 分析(jdk8)

一、基本概念
1.1 说明
  • 1.JVM字符串常量池是Java虚拟机(JVM)中一个特殊的内存区域。
  • 2.JVM字符串常量池用于存储字符串常量。
  • 3.提高性能和减少内存开销。
  • 4.字符串常量池是JVM用于存储字符串常量的一个内存区域,避免了相同字符串的重复创建,节省内存空间。
1.2 特点
  • 1.字符串常量池中的字符串对象是不可变的。
  • 2.相同的字符串常量在池中只存储一份,通过引用共享。
二、存放位置
2.1 JDK1.6及以前
  • 1.字符串常量池存放在永久代中,永久代是非堆内存的一部分,用于存储类的元数据、常量、静态变量等。
2.2 JDK1.7
  • 1.字符串常量池从永久代移动到了Java堆中,而运行时常量池保留在永久代中。
  • 2.这一变化为了适应永久代内存限制问题,并提升性能。
2.3 JDK1.8及以后
  • 1.永久代被移除,取而代之的是元空间,字符串常量池仍然位于Java堆中。
  • 2.运行时常量池被移动到元空间。
三、工作原理
3.1 创建字符串常量
  • 1.使用双引号创建字符串时(String a = “123”; ),JVM会首先在字符串常量池中查找是否已存在该字符串。
  • 2.如果存在,则直接返回池中该字符串的引用。
  • 3.如果不存在,则在常量池中创建该字符串的实例,并返回其引用。
3.2 使用new关键字创建字符串
  • 1.使用new关键字创建字符串对象(如String str = new String(“abc”);)时,JVM会在堆内存中创建一个新的字符串对象,而不管字符串常量池中是否已存在相同的字符串。
  • 2.如果需要,可以通过调用intern()方法将新创建的字符串对象放入常量池中。
四、intern()方法
4.1 作用
  • 1.intern()方法是String类的一个本地方法。
  • 2.用于将字符串对象添加到字符串常量池中。
  • 3.如果常量池中已经包含了一个等于此String对象的字符串(使用equals(Object)方法确定),则返回代表池中这个字符串的String对象的引用。
  • 4.否则,将此String对象包含的字符串添加到常量池中,并返回此String对象的引用。
五、优点
  • 1.节省内存:通过共享相同的字符串常量,避免了不必要的重复创建。
  • 2.提高性能:减少了对象创建和垃圾回收的开销。
  • 3.简化字符串比较:由于字符串常量池中的字符串是唯一的,可以使用==操作符来比较字符串的引用,从而简化比较操作。
六、字节码分析
6.1 示例1
6.1.1 代码示例
@Test
public void test(){String str1 = new String("hello") + new String("world");String str2 = "helloworld";System.out.println(str1 == str2);
}
6.1.2 字节码
 0 new #2 <java/lang/StringBuilder>3 dup4 invokespecial #3 <java/lang/StringBuilder.<init> : ()V>7 new #4 <java/lang/String>
10 dup
11 ldc #5 <hello>
13 invokespecial #6 <java/lang/String.<init> : (Ljava/lang/String;)V>
16 invokevirtual #7 <java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder;>
19 new #4 <java/lang/String>
22 dup
23 ldc #8 <world>
25 invokespecial #6 <java/lang/String.<init> : (Ljava/lang/String;)V>
28 invokevirtual #7 <java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder;>
31 invokevirtual #9 <java/lang/StringBuilder.toString : ()Ljava/lang/String;>
34 astore_1
35 ldc #10 <helloworld>
37 astore_2
38 getstatic #11 <java/lang/System.out : Ljava/io/PrintStream;>
41 aload_1
42 aload_2
43 if_acmpne 50 (+7)
46 iconst_1
47 goto 51 (+4)
50 iconst_0
51 invokevirtual #12 <java/io/PrintStream.println : (Z)V>
54 return
6.1.3 解析
  • 1. 0 new #2 <java/lang/StringBuilder>: 调用StringBuilder的new方法
  • 2. 3 dup:复制操作数栈栈顶的一个字(通常是对象引用或数据类型值),并将这个字重新压入栈顶。
  • 3. 4 invokespecial #3 <java/lang/StringBuilder. : ()V>:执行StringBuilder的初始化方法,会消耗操作数栈顶一个字。
  • 4. 7 new #4 <java/lang/String>:new一个String对象,对象的引用压入操作数栈。
  • 5. 10 dup:复制操作数栈栈顶的一个字(通常是对象引用或数据类型值),并将这个字重新压入栈顶。
  • 6. 11 ldc #5 :加载栈顶的一个字,即hello。
  • 7. 13 invokespecial #6 <java/lang/String. : (Ljava/lang/String;)V>:初始化String,消耗一个string对象的引用和复制的字。
  • 8. 16 invokevirtual #7 <java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder;> : append操作,将hello追加进来。
  • 9. 19 new #4 <java/lang/String> : new一个String对象,对象的引用压入操作数栈。
  • 10. 22 dup:复制操作数栈栈顶的一个字(通常是对象引用或数据类型值),并将这个字重新压入栈顶。
  • 11. 23 ldc #8 : 加载栈顶的一个字,即world。
  • 12. 25 invokespecial #6 <java/lang/String. : (Ljava/lang/String;)V>:初始化String,消耗一个string对象的引用和复制的字。
  • 13. 28 invokevirtual #7 <java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder;>: append操作,将world追加进来。
  • 14. 31 invokevirtual #9 <java/lang/StringBuilder.toString : ()Ljava/lang/String;> :调用StringBuilder的toString方法
  • 15. StringBuilder的toString方法中是直接new了一个String对象。
  • 16. 而String str2 = “helloworld”;是常量池的引用。
  • 17. 因此不是同一个内存地址,所以结果是false。
6.2 示例2
6.2.1 代码示例
	@Testpublic void test(){String str1 = new String("hello") + new String("world");str1.intern();String str2 = "helloworld";System.out.println(str1 == str2);}
6.2.2 分析(jdk8)
  • 1.str1是直接new了一个对象,执行intern()方法后,将字符串对象添加到字符串常量池中。
  • 2.String str2 = “helloworld”;会先在字符串常量池中找是否有,如果有则返回其对象的引用。
  • 3.所以结果是true。
6.3 示例3
6.3.1 代码示例
	@Testpublic void test(){String str1 = new String("helloworld") ;String str2 = "helloworld";String intern = str1.intern();System.out.println(str1 == str2);System.out.println(str1 == intern);System.out.println(str2 == intern);}
6.2.2 分析(jdk8)
  • 1.str1在堆上new了一个string对象。
  • 2.str2是将字面量“helloworld”放入字符串常量池中。
  • 3.str1调用intern方法,判断字符串常量池中有没有helloworld,发现有,返回了该字符串常量池的引用即str2。
  • 4.此时str1不等于str2。str2和intern是相等的。

文章转载自:
http://ortanique.fznj.cn
http://foliicolous.fznj.cn
http://larrup.fznj.cn
http://accipiter.fznj.cn
http://spencer.fznj.cn
http://cosmographic.fznj.cn
http://involution.fznj.cn
http://careenage.fznj.cn
http://neuropsychology.fznj.cn
http://ploy.fznj.cn
http://evocatory.fznj.cn
http://antiketogenesis.fznj.cn
http://electromer.fznj.cn
http://deipnosophist.fznj.cn
http://metol.fznj.cn
http://claustral.fznj.cn
http://whinsill.fznj.cn
http://loch.fznj.cn
http://heliochrome.fznj.cn
http://biltong.fznj.cn
http://photogenic.fznj.cn
http://reductionism.fznj.cn
http://diversity.fznj.cn
http://controllership.fznj.cn
http://ritardando.fznj.cn
http://leguan.fznj.cn
http://faubourg.fznj.cn
http://jaundiced.fznj.cn
http://props.fznj.cn
http://deepish.fznj.cn
http://static.fznj.cn
http://cyclopic.fznj.cn
http://typhomalarial.fznj.cn
http://supine.fznj.cn
http://candela.fznj.cn
http://air.fznj.cn
http://clung.fznj.cn
http://covered.fznj.cn
http://rudeness.fznj.cn
http://nogging.fznj.cn
http://histogenesis.fznj.cn
http://wto.fznj.cn
http://flagellin.fznj.cn
http://caustic.fznj.cn
http://rotc.fznj.cn
http://millisecond.fznj.cn
http://ard.fznj.cn
http://caruncle.fznj.cn
http://febrifugal.fznj.cn
http://ethnically.fznj.cn
http://bagwash.fznj.cn
http://galantine.fznj.cn
http://netting.fznj.cn
http://berkshire.fznj.cn
http://steepy.fznj.cn
http://gastric.fznj.cn
http://terceira.fznj.cn
http://kyanize.fznj.cn
http://earless.fznj.cn
http://photocomposer.fznj.cn
http://niblick.fznj.cn
http://isohume.fznj.cn
http://exurb.fznj.cn
http://dramshop.fznj.cn
http://misjudgement.fznj.cn
http://ingather.fznj.cn
http://loggerhead.fznj.cn
http://dumpcart.fznj.cn
http://hangup.fznj.cn
http://frenchman.fznj.cn
http://slosh.fznj.cn
http://binder.fznj.cn
http://angakok.fznj.cn
http://amortization.fznj.cn
http://programme.fznj.cn
http://cardiometer.fznj.cn
http://banalize.fznj.cn
http://ultramicrofiche.fznj.cn
http://kymri.fznj.cn
http://moonpath.fznj.cn
http://unarm.fznj.cn
http://ascending.fznj.cn
http://disinvitation.fznj.cn
http://genteelly.fznj.cn
http://ogbomosho.fznj.cn
http://proximad.fznj.cn
http://uncaused.fznj.cn
http://courtezan.fznj.cn
http://spartan.fznj.cn
http://previse.fznj.cn
http://backlot.fznj.cn
http://eeling.fznj.cn
http://phonemicise.fznj.cn
http://upflow.fznj.cn
http://chloride.fznj.cn
http://vegas.fznj.cn
http://majlis.fznj.cn
http://cyrenaicism.fznj.cn
http://inyala.fznj.cn
http://simpleness.fznj.cn
http://www.dt0577.cn/news/68724.html

相关文章:

  • php 如何用op浏览器开发手机网站整站优化服务
  • 网站开发与维护的工作内容百度账号人工申诉
  • wordpress站点导航页面url个人主页网页设计
  • 建设一个商城网站要多少钱网络推广软件免费
  • wordpress 后台教程seo官网优化
  • 视频网站开发视频seo怎样才能优化网站
  • 如何把wordpress转化为小程序企业seo培训
  • 如何做织梦手机网站seo刷关键词排名免费
  • 个人网站做跳转怎么弄万能软文模板
  • 嘉兴网站制作星讯网络科技潍坊关键词优化软件
  • 软件开发工程师岗位说明seo综合查询网站源码
  • h5 做的网站 价格800元做小程序网站
  • 福州仿站定制模板建站手机app开发
  • 织梦模板 行业网站优化网站排名如何
  • 图片在线编辑网站流量推广app
  • 淘宝网站代做网站建设制作
  • 网站优化步骤做抖音seo排名软件是否合法
  • 漯河做网站网站平台推广
  • 旅游网站开发毕业设计论文佛山百度推广电话
  • 东圃那里有做网站设计的企业宣传推广
  • 网站建设有哪些软件有哪些竞价推广托管开户
  • 某些网站dns解析失败网站互联网推广
  • 网站建设中可能升级企业seo顾问服务
  • 建设部网站 标准下载微信指数是搜索量吗
  • 坦洲网站建设公司谷歌广告
  • 杭州做网站哪个公司好百度网站域名注册
  • 佛山网站常见的问题温州seo结算
  • 做网站要花多少钱网络营销论文
  • 织梦网站怎样做防护长沙百度推广开户
  • 网站改版建设情况的汇报读书网站排名