java内存机制中的堆栈常量池简介
来源:互联网 发布:80端口入侵教程 编辑:程序博客网 时间:2024/06/05 02:21
java内存分配只要包括以下几个区域:
1,堆:存放用new出来的对象。
2,栈:存放基本数据类型和对象的“引用”,但对象本身不再栈中而是存放在栈中
3,常量池:存放常量
4,寄存器:我们在程序中无法控制
5,静态域:存放在对象中使用static定义的静态成员
6,非RAM存储:磁盘等永久存储空间
java内存中分配的栈
为函数中定义的一些基本类型的数据和”对象引用变量”等都在函数的栈内存中分配,当一段代码
块定义一个变量的时候。java就在栈中为这个变量分配内存空间,当该变量退出作用域后,java会自动释放掉
为该变量分配的内存空间。
java内存中分配的堆
堆内存中用来存放new出来的对象数组,堆中的内存分配是由java虚拟机的垃圾自动回收来进行管理。
在堆中产生了一个数组或者对象后,引用变量就相当于是为这个数组或者对象取的名字,以后就可以在程序中
使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是数组或者对象的一个名称
引用变量是普通的变量,定义在栈内存中,引用变量在程序运行到作用于之外后被释放,堆数组和对
象本身在堆中分配,即使程序运行到使用new产生数组对象的语句所在代码块之外,对象的数组占用的内存也
不会释放,数组和对象在没有引用变量指向的时候,会变为垃圾不能被使用,但是仍然占着内存,随后在一个
不确定的时间被GC收走。
常量池
存放字符串常量和基本类型常量
例子
String s1 = “China”;
String s2 = “China”;
String s3 = “China”;
String ss1 = new String(“China”);
String ss2 = new String(“China”);
String ss3 = new String(“China”);
其中s1,s2,s3,ss1,ss2,ss3都是引用变量(String不是基本类型,而是引用类型),所以存放在栈中,
China 是字符串常量,存放在常量池中, new String(”China”)是new出来的字符串,存放在堆中。
参考文章:http://www.cnblogs.com/SaraMoring/p/5687466.html
- java内存机制中的堆栈常量池简介
- JAVA堆栈内存机制
- java堆栈常量池
- Java中的堆栈机制以及堆内存和栈内存
- Java中堆栈常量池等内存分配原理详解
- Java String 内存机制与常量池
- Java中的内存堆栈
- Java堆栈常量池深入
- Java中的堆栈内存浅析
- Java中的堆栈内存浅析
- java中内存中的堆栈
- java中的内存常量问题
- 黑马程序员--java堆栈常量池
- java堆栈,常量池的浅析
- java堆栈、String、常量池分析
- java 堆栈常量池,String创建图解
- Java中的堆栈存储机制详解
- java中的堆栈与内存分配原理
- Linux根目录下各目录文件类型及各项缩写全称
- Spring 多线程与异步编程
- Linux配置防火墙详细步骤(iptables命令使用方法)
- 无法升级数据库 'SchoolPlatForm1',因为它是只读的,或者具有只读文件。请将数据库或文件设为可写,然后重新运行恢复操作。 (Microsoft SQL Server,错误: 3415)
- POJ3264-Balanced Lineup
- java内存机制中的堆栈常量池简介
- C/C++面试题(三)
- Dol嵌入式软件之安装
- 最长无重复字符的子串-LintCode
- C/C++面试题(四)
- java设计模式-工厂模式
- MTK LCM显示驱动源码分析(一)
- 【noip2009】靶形数独(搜索+二进制优化)
- 浓墨重彩之OpenStack-开篇声明。