Java内存分配:

◆寄存器:我们在程序中无法控制

◆栈:存放基本类型的数据和对象的引用,以及成员方法中的局部变量

◆堆:存放对象本身(成员变量+成员方法的引用)

◆静态域:存放在对象中用static定义的静态成员

◆常量池:存放常量

◆非RAM存储:硬盘等永久存储空间

栈的存取速度比堆快,仅次于寄存器。

常量池:

专门用于存储、管理在编译时就可以确定的保存在.class文件中的一些数据。

包括代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:

◆类和接口的全限定名;

◆字段的名称和描述符;

◆方法的名称和描述符。

int a=1; //在编译时就可以确定a的值为1,1存放在常量池中,栈中a存的其实是常量池中1的地址

int b=2+3; //在编译时就能确定b的值为5,5存放在常量池中,栈中b存的其实是常量池中5的地址

int c=a+b; //编译时不能确定c的值

String str1="hello"; //编译时能确定,“hello”存储在常量池中,栈中存的是对应的地址

String str2="hello"+" world"; //编译时能确定,“hello world”存储在常量池中,栈中存的是对应的地址

String str3=str1+"world"; //编译时不能确定str3的值

在常量池中,相同的直接量只有一个,不会产生多个副本。比如:

int a=1;

int b=1;

常量池中只存储一个直接量1;栈中a和b存储的都是常量池中该直接量的内存地址,它们引用同一个直接量。

String str=new String("hello java"); //这是一个对象,存储在堆中,“hello java”并不会放在常量池中。

java 常量池 堆_Java 内存分配(堆、栈、常量池)相关推荐

  1. java 栈和堆 进出顺序_Java内存分配---堆与栈

    堆和栈的概念接触已久,也很容易让人似懂非懂.本文阐述它们的区别和作用.配合一个小例子,加深对其理解. 堆内存 堆内存是在Java程序运行时分配的,它用来存放对象,对象也总是在堆中.GC的作用域也是在堆 ...

  2. java double储存原理_Java内存分配原理

    Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ...

  3. 12.JDK1.8 JVM运行时数据区域概览、各区域介绍、程序计数器、Java虚拟机栈、本地方法栈、堆、堆空间内存分配(默认情况下)、字符串常量池、元数据区、jvm参数配置

    12.JDK1.8 JVM运行时数据区域概览 12.1.JDK1.8 JVM运行时数据区域概览 12.2.各区域介绍 12.3.各区域介绍 12.3.1.程序计数器 12.3.2.Java虚拟机栈 1 ...

  4. Java虚拟机堆的内存分配和回收

    java内存分配和回收,主要就是指java堆的内存分配和回收.java堆一般分为2个大的区域,一块是新生代,一块是老年代.在新生代中又划分了3块区域,一块eden区域,两块surviver区域.一般称 ...

  5. 【09-JVM面试专题-实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗?】

    实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗? 实例化过程详细讲讲?对象的基本结构你知道吗?TLAB堆上内存分配是怎么样的?你了解这个TLAB吗?你 ...

  6. Java堆外内存:堆外内存溢出问题排查

    一.堆外内存组成 通常JVM的参数我们会配置 -Xms 堆初始内存  -Xmx 堆最大内存  -XX:+UseG1GC/CMS 垃圾回收器  -XX:+DisableExplicitGC 禁止显示GC ...

  7. java堆外内存6_Java 堆外内存的使用

    更多 Java 虚拟机方面的文章,请参见文集<Java 虚拟机> 为什么需要使用堆外内存 将长期存活的对象(如 Local Cache )移入堆外内存( off-heap,又名直接内存 d ...

  8. Java堆外内存:堆外内存回收方法

    一.JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里. 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面 ...

  9. Java堆内内存和堆外内存

    1.堆内内存概念 堆内一般指堆内内存,英文全称:on-heap memory (heap:堆,java的内存区) java虚拟机分配非空对象一般就放到堆内内存,并且虚拟机会定期会进行垃圾回收在某些特定 ...

最新文章

  1. gitlab部署步骤+汉化
  2. NewSQL——优化的SQL存储引擎(TokuDB, MemSQL)+?
  3. python matplotlib.pyplot中的.plot()和.scatter()以及.subplot()和.add_axes()区别
  4. Spring IoC 源码系列(四)bean创建流程与循环依赖问题分析
  5. 学生用计算机中sto,STO 文件扩展名: 它是什么以及如何打开它?
  6. margin折叠-从子元素margin-top影响父元素引出的问题
  7. java知识点八:时间日期类
  8. Vue-Treeselect 的下拉菜单不出Table的框
  9. 为报复老东家,程序员编码给自己转账553笔,金额超21万元
  10. html5页面布局 最基本的规范
  11. 如何舒服地在图书馆用ipad入门深度学习【windows jupyter远程】
  12. 小程序获取用户openid,php获取微信小程序openid的方法
  13. 参考爆料英特尔i5-10400f和i5-10400区别?哪个好?深度爆料评测
  14. 计算机应用技术高数学几本书,高一下学期数学学必修几 学哪几本书
  15. OpenStack 2015.1.0 (Kilo)更新日志
  16. 淘宝新手如何做推广 最新最全的淘宝店铺免费推广方法秘诀
  17. 电子计算机制作探测,金属探测器DIY,你真正了解过多少?
  18. 有什么翻译pdf的软件吗?告诉你几款实用的翻译软件
  19. 大工21春《SQL数据库课程设计》模板及要求
  20. Xshell6 中文不限时版下载(免密匙)

热门文章

  1. 微服务架构学习与思考(05):微服务架构适用场景分析
  2. to B变道to C,优信二手车的下一阶段怎么跑?
  3. python读取文本数据绘制曲线图
  4. 将蛋白质pdb文件中的受体和配体的残基序号重新排序
  5. 供水泵站远程监控系统功能
  6. 专业的面相识别的企业|人脸识别离线SDK |人证比对API
  7. c blowfish java,Java Blowfish解密后不提供原始字符串
  8. java与c++ socket通信_C++ socket 客户端与JAVA socket 服务端通信汗血宝马
  9. 孙武玩《魔兽》?有图有真相
  10. 分词计算频次代码-GO