Java数据类型和内存分配

Java的数据类型两大类:

1、基本数据类型:定以后直接分配内存空间,存储在栈中。

又可细分为:

数值型:整数byte/short/int/long及浮点float/double;

字符型char;

布尔型boolean;

2、引用数据类型:栈中存储引用指针地址,指向实际存放的堆;

又可分为:

类class;

接口interface;

数组array;



=================================================================

Java内存管理与数据类型关系 学习



根据上面,需要了解Java内存,以下内容斜体字摘至:

http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html


Java内存分两类:栈内存和堆内存。

简单说,程序操作基本数据类型是直接操作栈内存中的数据,操作引用数据类型是通过栈中的地址访问其指向的堆内存。而管理堆内存由java 的虚拟机负责。


堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因


内存三大分配策略:静态、栈、堆,其实质是对内存分配要求的几种适应。

静态:程序运行前就知道需要多少的内存空间大小;

栈:程序运行前并不清楚实际需要多大的存储空间,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存,而基本数据类型符合这类要求。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。

堆:专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例,堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放。

”堆主要用来存放对象的,栈主要是用来执行程序的“

因此,java中在函数中定义的一些基本类型的变量和对象的引用变量(其地址)都在函数的栈内存中分配。


=========================================================




原文地址:https://www.cnblogs.com/windanchaos/p/6398822.html