java内存分配

来源:互联网 发布:h3c mac认证 编辑:程序博客网 时间:2024/04/27 23:00

了解java分配的区域:
寄存器:这个无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,存放堆中
堆:存放被new出的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量
非RAM存储:硬盘等永久存储空间
1,栈: java程序的运行区,是在线程创建的时候一起创建的,其生命周期也是随着线程的生命周期,线程结束栈内存也会释放,所以对于栈内存来说不存在垃圾回收问题。
栈存储的是在函数定义的一些基本类型的变量数据,还有对象的引用变量都在函数的栈内存中分配。当在代码中去定义一个变量时,栈内存就会为这个变量分配内存空间。

2,堆:堆内存用来存放由关键字new创建的对象和数组。在堆中分配的内存,则是有java虚拟机的GC来管理。
在堆中厂商了一个数组或对象后,还可以在栈中定义一个特效的变量,让栈中这个变量的取值的那个数组或对象在堆内存中的首地址,栈中的这个变量于是就成了数组或变量的引用变量(类似指针),以后可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其他作用域之后被释放,而数组和对象本身在堆中分配,即使程序运行到使用new产生数组或对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,如果数组和对象在没有引用变量指向它时,才会变成无效内存地址,变成垃圾,不能被使用,在没有被垃圾回收之前,都会占据内存。

3,常量池:存储常量

原创粉丝点击