网站大量收购闲置独家精品文档,联系QQ:2885784924

[互联网]JVM 相关.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[互联网]JVM 相关

JVM 相关 Jvm运行时数据区域 程序计数器:它是线程私有的,它是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。如果线程正执行的是一个java方法它记录的是正在执行的虚拟机字节码指令的地址,如果线程正执行的是一个Native方法这个记数器的是则为空(Undefined)此内存区域也是唯一一个在java虚拟机规范中没有规定OutOfMemoryError情况的区域. Java虚拟机栈:它也是线程私有的生命周期与线程生命周期相同。它描述的是java方法执行的内存模型:每个方法被执行的时候 都会创建一个栈桢用来存储 局部变量表 方法出入口信息 每一个方法被调用直至执行完成的过程, 本地方法栈:此区域与虚拟机栈起到的作用类似,只不是过虚拟机栈是针对java方法 而此区域是针对native方法 同时 此区域也会抛出 StackOverflowError和 OutOfMemoryError两种异常. Java堆:它是java虚拟机管理的内存中最大的一块,它是被所有线程共享的一块内存区域,它在虚拟机启动时创建,它的唯一目的是存储对象实例,几乎所有的对象都在这里分配内存。Java堆也是垃圾收集器管理的主要区域,如果从内存回收的角度看 由于现在收集器采用分代收集算法所以可以分为老年代和新生代 再细致有Eden空间 from、to 空间 但是无论怎么划分 它都是只是存储对象实例而已。 方法区: 运行时常量池: String常量池详解:   1.String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不 可变的(immutable)。String类有一个特殊的创建方法,就是使用双引号来创建.例如new String(i am)实际创建了2个   String对象,一个是i am通过双引号创建的,另一个是通过new创建的.只不过他们创建的时期不同,   一个是编译期,一个是运行期!java对String类型重载了+操作符,可以直接使用+对两个字符串进行连接。运行期调用String类的intern()方法可以向String Pool中动态添加对象。      例1   String s1 = sss111;   //此语句同上   String s2 = sss111;   System.out.println(s1 == s2); //结果为true   例2   String s1 = new String(sss111);   String s2 = sss111;   System.out.println(s1 == s2); //结果为false   例3   String s1 = new String(sss111);   s1 = s1.intern();   String s2 = sss111;   System.out.println(s1 == s2);//结果为true   例4   String s1 = new String(111);   String s2 = sss111;   String s3 = sss + 111;   String s4 = sss + s1;   System.out.println(s2 == s3); //true   System.out.println(s2 == s4); //false   System.out.println(s2 == s4.intern()); //true      结果上面分析,总结如下:    1.单独使用引号创建的字符串都是常量,编译期就已经确定存储到String Pool中;   2,使用new String()创建的对象会存储到heap中,是运行期新创建的;   3,使用只包含常量的字符串连接符如aa + aa创建的也是常量,编译期就能确定,已经确定存储到String Pool中;   4,使用包含变量的字符串连接符如aa + s1创建的对象是运行期才创建的,存储在heap中;   还有几个经常考的面试题:      String s1 = new String(s1) ;   String s2 = new String(s1) ;   上面创建了几个String对象?   答案:3个 ,编译期Constant Pool中创建1个,运行期heap中创建2个.(用new创建的每new一次就在堆上创建一个对象,用引号创建的如果在常量池中已有就直接指向,不用创建)   String s1 = s1;   String s2 = s1;   s2 = s2;   s1

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档