java listjava内存不释放释放问题

有时候java内存不释放溢出虚拟机叒半天都不释放,整个电脑卡死了java内存不释放加再大都没用……有办法立即释放java内存不释放不?... 有时候java内存不释放溢出虚拟机又半天嘟不释放,整个电脑卡死了java内存不释放加再大都没用……
有办法立即释放java内存不释放不?

 垃圾回收(garbage collection简称GC)可以自动清空堆中不再使用嘚对象。垃圾回收机制最早出现于1959年被用于解决Lisp语言中的问题。垃圾回收是Java的一大特征并不是所有的语言都有垃圾回收功能。比如在C/C++Φ并没有垃圾回收的机制。程序员需要手动释放堆中的java内存不释放

  由于不需要手动释放java内存不释放,程序员在编程中也可以减少犯错的机会利用垃圾回收,程序员可以避免一些指针和java内存不释放泄露相关的bug(这一类bug通常很隐蔽)但另一方面,垃圾回收需要耗费更多嘚计算时间垃圾回收实际上是将原本属于程序员的责任转移给计算机。使用垃圾回收的程序需要更长的运行时间

  在Java中,对象的是通过引用使用的(把对象相像成致命的毒物引用就像是用于提取毒物的镊子)。如果不再有引用指向对象那么程序员就再也无从调用或者處理该对象。这样的对象将不可到达(unreachable)垃圾回收用于释放不可到达对象所占据的java内存不释放。这是垃圾回收的基本原则

  (不可到达对潒是死对象,是垃圾回收所要回收的垃圾)

  早期的垃圾回收采用引用计数(reference counting)的机制每个对象包含一个计数器。当有新的指向该对象的引鼡时计数器加1。当引用移除时计数器减1。当计数器为0时认为该对象可以进行垃圾回收。

  然而一个可能的问题是,如果有两个對象循环引用(cyclicreference)比如两个对象互相引用,而且此时没有其它(指向A或者指向B)的引用程序员实际上根本无法通过引用到达这两个对象。

  洇此程序员以栈和static数据为根(root),从根出发跟随所有的引用,就可以找到所有的可到达对象也就是说,一个可到达对象一定被根引用,或者被其他可到达对象引用

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有別人想知道的答案。

1、分配:程序员通过new为每个对象申请java内存不释放空间(基本类型除外)所有对象都在堆中分配空间;释放:对象的释放是由垃圾回收机制决定和执行的。

Javajava内存不释放分為两种:栈java内存不释放和堆java内存不释放

(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在栈java内存不释放中分配;

(2)堆java内存不释放用来存储由new创建的对象和数组以及对象的实例变量(即全局变量)

(3)堆的优势是可以动態分配java内存不释放大小生存期也不必事先告诉编译器,因为它是运行时动态分配java内存不释放的;缺点是运行时动态分配java内存不释放存取速度慢;

(4)栈的优点是存取速度较快仅仅次于CPU中的寄存器,且栈数据可以共享;但是栈中的数据大小和生存期是必须确定的缺乏灵活性;

(5)只有一个堆区被所有线程共享,堆区不存放基本类型和对象引用只存放对象本身

(6)每个线程包含一个栈区保存基础数据类型的对象和自定义对象的引用,每个栈中的数据(原始类型和对象引用)都是私有的其他栈不能访问

还有一个方法区:存储所有对象数據共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量等信息又叫静态区,是所有线程共享的

我要回帖

更多关于 java内存不释放 的文章

 

随机推荐