jvm堆、栈、String常量池
原文地址:http://blog.csdn.net/tophawk/article/details/78704074
- 程序计数器:它的生命周期与线程相同,线程私有。较小的内存区域,用以完成分支、循环、跳转、异常处理、线程恢复等基础功能。不会发生内存溢出(OutOfMemory=OOM)错误。
- 虚拟机栈:它的生命周期与线程相同,线程私有。虚拟机栈中存储了方法执行时相关信息,每个方法在调用时都会在虚拟机栈中创建一个方法帧,方法帧中包含了局部变量,参数,运行中间结果等信息。帧数超过限制(-Xss),就会出现StackOverFlow(=SOF)错误。另外超过线程分配的内存大小,也会报OOM错误。
- 本地方法栈:它的生命周期与线程相同,线程私有。基本同虚拟机栈。存放的是native方法帧。可出现SOF和OOM错误。
- 元空间(MetaSpace):所有线程共享。存放class加载相关信息。
- 堆:所有线程共享。存放new出来的数组和对象数据,以及类的静态变量。同时,包含一个常量池(final),是由1.7以前版本的方法区转移过来的。
由图可知:
- str1==str2 指向同一个堆对象,同时创建了一个常量池引用。
- str3 创建了3个堆对象,只创建了一个常量池引用。
- str4 创建了2个堆对象,其中有个对象的value引用另一个的value地址,并未创建常量池引用。
另外补充几点关于String的总结:
- 字面量方式声明,查找常量池有则返回引用。否则,堆里生成对象,同时在在常量池生成引用。如:String s = "xyz";
- 字面量相+,根据+的结果查找常量池有则返回引用,否则,堆里生成对象,同时在常量池生成引用。如:String s = "a"+"b"; 常量池查找“ab”。最多生成三个对象。
- 字符串相+,如果有一个不是字面量,则必在堆里生成一个新对象,常量池不生成引用。如:String s=s1+"a";
jvm堆、栈、String常量池的更多相关文章
- Java中 堆 栈,常量池等概念解析(转载)
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符 ...
- 用jvm指令分析String 常量池
其他博友的不同理解方式: http://hi.baidu.com/boywell/item/d5ee5b0cc0af55c875cd3cfd 我们先来看一个类 public class javaPT ...
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典) (转)
原文链接 : http://www.cnblogs.com/xiohao/p/4296088.html 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的 ...
- Java堆、栈和常量池以及相关String的详细讲解
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- java中的堆、栈、常量池以及String类型的两种声明
参考自http://blog.sina.com.cn/s/blog_798b04f90100ta67.html http://www.cnblogs.com/fguozhu/articles/2661 ...
- Java堆、栈和常量池以及相关String详解
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- Java堆、栈和常量池以及相关String的详细讲解(转)
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- java中的堆、栈、常量池
java中的堆.栈.常量池 分类: java2010-01-15 03:03 4248人阅读 评论(5) 收藏 举报 javastring编译器jvm存储equals Java内存分配: 1. 寄存器 ...
- Java内存分配之堆、栈和常量池
Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静 ...
- Java内存分配之堆、栈和常量池(转)
摘录自http://www.cnblogs.com/SaraMoring/p/5687466.html Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类 ...
随机推荐
- Spring Boot Cache使用与整合
Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Caffeine.Ehcache等),但本身不直接提供缓存功能的实现.它支持注解方式使用缓存,非常方便. SpringBoot在a ...
- W5500嵌入式开发
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:
- centos上安装grafana
wget https://dl.grafana.com/oss/release/grafana-6.2.5-1.x86_64.rpm yum localinstall grafana-6.2.5-1. ...
- vue条件语句、循环语句、计算属性、侦听器监听属性
因为 v-if 和v-for是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if.最终 ...
- 使用 Docker 和 Jenkins 持续交付(新书免费获取!)
今天没有长篇大论,给大家推荐一本新书,书名:Continuous Delivery with Docker and Jenkins.封面如图所示: 以下内容纯属凑字数 本书结合了 Jenkins 和 ...
- 【01】Jenkins:安装配置
写在前面的话 从我的工作经历来看,刚出来的时候的第一家公司我们上线采用的是脚本上线.就是那种开发合并完代码以后,在一个固定的时间点,我们上服务器执行更新脚本打包更新.这种方法有一个很大的问题,就是对于 ...
- Canon MF113W激光打印机双面打印方法
系统:macOS 10.14.3 打印机:Canon MF113W 黑白激光打印机(不支持自动双面打印) 方法: 1)文件->打印->纸张处理->仅奇数页->倒序->打印 ...
- 关于NB-IoT,没有比这篇更通俗易懂的啦!
来源:内容来自「鲜枣课堂」,谢谢. 大家好,我是小枣君. 今天,我是来“吹NB”的.嗯,标题已经剧透了,这个NB,就是NB-IoT. 在过去的一年多,NB-IoT真的可以说是大红大紫.在通信圈里,除了 ...
- 【Elasticsearch】【WEB】java web服务连接es elasticsearch始终报错,无法正常连接使用的错误解决历程
前情提要: web服务往华为云上迁移 ================内网的好环境,相关配置=================== 1.web服务关于ES的集群配置如下: elasticAddress ...
- Spring Boot 运行原理 - 核心注解
https://www.jianshu.com/p/23f504713b94 核心注解 打开上面任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-aut ...