Java内存区域——直接内存和运行时常量池

本文探讨了Java内存区域中的运行时常量池,它是方法区的一部分,用于存储编译期生成的字面量和符号引用。字符串在Java中的存储涉及堆和常量池,相同字符串在常量池中只存储一份,从而实现引用的相等。另外,介绍了直接内存,它是非Java虚拟机管理的内存,常用于NIO操作,不受Java堆限制但受限于操作系统物理内存。
摘要由CSDN通过智能技术生成

运行时常量池是属于方法区的一块,class文件中除了有类的版本、字段、方法、接口等描述信息以外,还有一项信息就是常量池,那么,这个常量池是干什么的呢?它就是用来存放编译期生成的各种字面量以及符号引用这部分内容将在类加载后,进入方法区的运行时常量池中存放。举个例子

基本数据类型抽象数据类型的引用会放到哪里呢?我们之前所讲的内存区域,随着这个方法的运行,会对每一个方法创建一个栈帧,栈帧里面有一个局部变量表,那么,我们所有的基本数据类型,包括抽象数据类型的引用都会放到局部变量表中。String是一个抽象数据类型,那么s1就是存放的引用,s1和s2这两个引用分别存到一个局部变量表中,那么,“abc”到底放到哪里了呢?“abc”是一个对象,是一个引用类型,那么也就是说,“abc”应该按照我们的理解分配到Java堆中,如果是分配到Java堆中的话,其实我们说在创建对象实例的时候才会往堆中去分配空间,“abc”就是s1对象的实例,我们认为,如果说它每一次都创建了实例的话,每一次创建实例,每一次都会往堆中去新开辟一块空间来存放这个对象实例的数据

如果说,按照我们刚才说的,每一次创建一个实例,都需要在堆中开辟一块空间,那么,“==”比较的是地址,比如这是我们的堆内存

还有一块栈内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值