- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- [理学]第六章 化学热力学初步.ppt
- [理学]第六章 资本结构决策.ppt
- [理学]第六章 运输保险.ppt
- [理学]第六章_水力分级.ppt
- [理学]第六章保形映射正式版.ppt
- [理学]第六章在磁场中的原子.ppt
- [理学]第六讲:方程求根.ppt
- [理学]第十一章 应用电化学.ppt
- [理学]第十一章 动量矩定理.ppt
- [理学]第十一章 醛和酮.ppt
- 艺术疗法行业商业机会挖掘与战略布局策略研究报告.docx
- 智能家庭娱乐系统行业商业机会挖掘与战略布局策略研究报告.docx
- 医疗纠纷预防和处理条例与医疗事故处理条例的思考分享PPT课件.pptx
- 新冀教版(2025)七年级数学下册《6.1 二元一次方程组》习题课件.pptx
- 新冀教版(2025)七年级数学下册精品课件:6.2.3 二元一次方程组的解法代入、加减消元法的综合应用.pptx
- 导演节目行业市场发展趋势及投资咨询报告.docx
- 制作和服培训行业风险投资态势及投融资策略指引报告.docx
- 医疗转诊的行政服务行业消费市场分析.docx
- 文件装订行业市场发展趋势及投资咨询报告.docx
- 在线语言艺术教育行业分析及未来五至十年行业发展报告.docx
文档评论(0)