JAVA内存分配入门

最近在牛客写了几道字符串的题目,总是出现错误。仔细想想发现都是关于
Java内存方面的问题,所以我打算写一篇文章来梳理一下知识点。
Java内存结构包含以下部分:

1、栈区:由编译器自动分配释放,具体方法执行结束后,系统自动释放JVM内存资源。
其作用有保存局部变量的值,包括:1.用来保存基本数据类型的值;2.保存类的实例,即堆区对象的引用。也可以用来保存加载方法时的帧。

2、堆区:一般由程序员分配释放,JVM不定时查看这个对象,如果没有引用指向这个对象就回收。
其作用为用来存放动态产生的数据,包括new出来的实例,字符数组等。
同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法。

3、数据区:用来存放static定义的静态成员。
4、常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括 基本常量(基本类型),对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号:

  1. 类和接口的全限定名;
  2. 字段的名称和描述符;
  3. 方法和名称和描述符。
    引用池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中(Method Area)。
    下面看一道经典例题:
    在这里插入图片描述我们额外添加一种情况:
String f = "c";
String g = "ab" + "c";

f 没有创建对象,因为这一句等价于

String = "abc";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值