分配html
程序员经过new为每一个对象申请内存空间(基本类型除外),全部对象都在堆中分配空间;释放:对象的释放是由垃圾回收机制决定和执行的。java
Java内存分为两种:栈内存和堆内存程序员
(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在栈内存中分配;数组
(2)堆内存用来存储由new建立的对象和数组以及对象的实例变量(即全局变量)函数
(3)堆的优点是能够动态分配内存大小,生存期也没必要事先告诉编译器,由于它是运行时动态分配内存的;缺点是运行时动态分配内存,存取速度慢;.net
(4)栈的优势是存取速度较快仅仅次于CPU中的寄存器,且栈数据能够共享;可是栈中的数据大小和生存期是必须肯定的,缺少灵活性;线程
(5)只有一个堆区被全部线程共享,堆区不存放基本类型和对象引用只存放对象自己code
(6)每一个线程包含一个栈区,保存基础数据类型的对象和自定义对象的引用,每一个栈中的数据(原始类型和对象引用)都是私有的,其余栈不能访问htm
还有一个方法区:存储全部对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量等信息,又叫静态区,是全部线程共享的。对象
Java对象销毁
Java中垃圾收集器自动地按期扫描Java对象的动态内存,并将全部的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将全部无标记的对象做为垃圾进行回收,释放垃圾对象所占的内存空间。
对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就当即会被回收,仅当垃圾收集器空闲或内存不足时,才会回收他们。
Java中每一个对象都拥有一个finalize()方法:
垃圾回收器在回收对象时自动调用对象的finalize()方法来释放系统资源。
参考:https://www.cnblogs.com/liufangdekele/p/6118979.html
参考:http://www.jb51.net/article/64258.htm