`
yangmeng_3331
  • 浏览: 88020 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java中的栈,堆和常量池

    博客分类:
  • Java
阅读更多
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
  2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
  3. 堆:存放所有new出来的对象。
  4. 静态域:存放静态成员(static定义的)
  5. 常量池:存放字符串常量和基本类型常量(public static final)。
  6. 非RAM存储:硬盘等永久存储空间
  这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
  对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。
  如以下代码:
  Java代码
  String s1 = "china";
  String s2 = "china";
  String s3 = "china";
  String ss1 = new String("china");
  String ss2 = new String("china");
  String ss3 = new String("china");
  
  对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。
分享到:
评论
2 楼 yangmeng_3331 2011-12-13  
shiyiyue513 写道
文中有诸多不妥之处。

我是初学者,一直不太了解,这个找的感觉表达最清晰的一个,那里不妥能说一下吗
1 楼 shiyiyue513 2011-12-05  
文中有诸多不妥之处。

相关推荐

    Java堆、栈和常量池——内存剖析

    Java堆、栈和常量池——内存剖析

    java 内存中 堆、栈、常量池、方法区的总结

    详细的总结了java中在内存中创建的堆、栈、方法区、常量池的区别和用途

    java堆、栈和常量池

    java堆、栈和常量池

    java内存分配之常量池,栈,堆1

    Java内存分配之堆、栈和常量池 Java内存分配主要包括以下几个区域:1. 寄存器:我们在程序中无法控制2. 栈:存放基本类型的数据和对象的引用,但对象本身不

    Java中的堆、栈和常量池_.docx

    Java中的堆、栈和常量池_.docx

    Java堆,栈和常量池详解

    很好的解释了Java中内存的分配,使用,和回收的一些过程,让我们在理解和开发是能够的心应手。

    Java堆、栈和常量池详解

    易混点完美解析

    java堆-栈-堆栈常量池的区别,史上最全总结

    java堆-栈-堆栈常量池的区别,史上最全总结

    Java堆、栈和常量池

    2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.) 3. 堆:存放所有new出来的对象. 4. 静态域:存放静态成员...

    java堆栈常量池笔记

    清楚的介绍了java中基本数据类型和引用数据类型在内存中的分配

    深入Java核心 Java内存分配原理精讲

     ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中  ◆堆:存放用new产生的数据  ◆静态域:存放在对象中用static定义的静态成员  ◆常量池:存放常量  ◆非RAM存储:...

    java内存分配机制详解

    文档中介绍了: 寄存器 栈 堆 静态域 常量池 帮助java学习者从本质上理解java的运行机制。

    JAVA内存分配精讲.docx

    ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间

    java虚拟机规范(java SE7)

    第二章:java虚拟结构(运行时区域内存:寄存器,java虚拟机栈,java堆,方法去,运行时常量池,本地方法栈); 第三章:为java虚拟机编译; 第四章:Class文件格式; 第五章:加载、链接与初始化

    Java内存分配分析/栈内存、堆内存

    首先学习JVM相关需要需要内存的组成。  基本内容  · 堆  java动态创建对象,即对于new的一个...  首先明确的是:常量池存在于堆中。  即JVM为每个已加载的类型开辟一块区域,包括基本类型和String类型(其

    Java常见面试问题整理.docx

    运行时常量池是方法区的一部分,class文件除了有类的字段、接口、方法等描述信息之外,还有常量池用于存放编译期间生成的各种字面量和符号引用。在老版jdk,方法区也被称为永久代。在1.8之后,由于永久代内存经常...

    APP界面帧率测试结果

    栈(Stack):存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆(Heap):堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器(GC)来管理。 静态...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

Global site tag (gtag.js) - Google Analytics