烦请哪位举个会导致内存泄漏的例子!!!!

kiOm 2005-01-22 12:47:14
烦请哪位举个会导致内存泄漏的例子。谢~~~
...全文
634 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanzheng617 2005-03-12
  • 打赏
  • 举报
回复
java中是存在内存泄漏的问题,因为这是一些比较复杂的编程中因为一些有引用指向的对象,但是又从来没有使用过的对象造成的!
我只是在书上看过,但是没有看到实例!
java中同样并不是绝对的安全的,在一些特殊的情况下,同样存在内存泄漏这个问题!要研究这个问题,那你就得详细的看看,java的回收机制吧!
pro4j 2005-03-12
  • 打赏
  • 举报
回复
谢谢大家指教!
zhxujun 2005-01-31
  • 打赏
  • 举报
回复
对象无用,对象可达即是泄漏。
loucai 2005-01-28
  • 打赏
  • 举报
回复
gz
JackKen 2005-01-27
  • 打赏
  • 举报
回复
是不是这个原因所以现在都不提倡用Vector啊?
fish_kun 2005-01-27
  • 打赏
  • 举报
回复
简单的例子
用一个循环申请Object对象,并将所申请的对象放入一个Vector中,如果仅仅
释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回
收的。因此,如果对象加入到Vector后,还必须从Vector中删除,调用Vector
的remove方法,当然如果这个Vector不再使用了,直接将Vector对象设置为
null,所以对象都会被释放了。
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object o=new Object();
v.add(o);
o=null;
}
//此时,所有的Object对象都没有被释放,因为变量v引用这些对象.

对话框在需要释放时没有采用dispose()方法向swing注销,造成资
源的不可回收
/**
* 退出预览窗口
* @param evt
*/
private void exitPrevActionPerformed(java.awt.event.ActionEvent evt){
this.hide();
}

所有已经注册的keystrok在释放时没有注销,造成资源的不可回收
okButton.registerKeyboardAction( okButtonListener,
KeyStroke.getKeyStroke( KeyEvent.VK_ENTER, 0, true ),
JComponent.WHEN_IN_FOCUSED_WINDOW );

仅在初始化时注册了okbutton的KeyboardAction。没有释放。

总之,在java中的内存泄露是因为编程上的疏忽,而导致某些对象在长时间没
有被使用的情况下,却还被其它变量或对象引用,而不能被虚拟机回收.
要避免此,一是,当有addXXX方法时,就要有removeXXX方法对应,当有registxxx
时,就要有unregistxxx,反正是在做JDBC,事件注册,JMS消息注册时(涉及到资源
调用时),一定要记得释放资源.
二是,良好的编程风格,和类设计.类之间的耦合程度要尽量低,结构清晰.

三,推荐工具.
Borland公司的OptimizeIt,当然还有其他一些常见的工具如JinSight和Purify.
eureka0891 2005-01-27
  • 打赏
  • 举报
回复
Vector如果没有地方在引用是不是会被释放
会的,

java中严格来说没什么内存泄漏,
像lxleaves(飘泊的叶子) 的例子,这个也对象确实一直在内存里,但是也可能通过
Test.test来取到的,

所以不要考虑这个,
除非你一次new很多很多的对象放到一个List等里(这个List生存时间很长)时,
而且用过list(i)之后你没有把list(i)=null
list(i)你以后也不用了,那么就会出outofmemmory
红楼梦魇 2005-01-27
  • 打赏
  • 举报
回复
数据库连接了不close
ybsoft 2005-01-27
  • 打赏
  • 举报
回复
Vector如果没有地方在引用是不是会被释放
pro4j 2005-01-23
  • 打赏
  • 举报
回复
支持以下!
liuyangxuan 2005-01-23
  • 打赏
  • 举报
回复
只要在堆中创建的分配的内存空间没有准时回收,就会产生楼主所讲的情况,不过我指的是C++中的例子,当然在JAVA中没有指针语法,只有虚引用,加上JVM自动垃圾回收,应该一般轻易不会出现这种情况。
liuyangxuan 2005-01-23
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main(){
int *Test = new int(100);
} //out of Memory
dyhml 2005-01-23
  • 打赏
  • 举报
回复
lxleaves(飘泊的叶子) 说:
class Test{
public Test test = null;
public static void main(String args[]){
Test t1 = new Test();
Test t2 = new Test();
t1.test=t2;
t2.test=t1;
t1=null;
t2=null;
}
}
丢了个static^-^
不知道这个属不属于内存泄漏~~

这个不会内存泄漏,现代垃圾回收算法可以回收。
稽姬 2005-01-23
  • 打赏
  • 举报
回复
内存渗漏体是编程中无法避免的问题,属于java的垃圾回收机制,由java虚拟机控制.
也可调用gc()方法和finalize()方法联合控制.
kiOm 2005-01-23
  • 打赏
  • 举报
回复
楼上的经典!
我想应该就是这个了。
我测试下先~~~~~~~~~~~~~~~~~~
GJA106 2005-01-22
  • 打赏
  • 举报
回复
楼上的现象应该不是内存泄漏,而是创建的数据量过多导致内存不够用。这种现象只要是电脑的都存在,谁用过vc/vb/dephi/c++/asp/php/java/
打开一个1G的文件保存到内存中?
wangwh_boy 2005-01-22
  • 打赏
  • 举报
回复
import java.util.*;
class TestMem
{
public static void main(String[] args)
{
System.out.println("Hello World!");
Vector vec=new Vector();
int i = 0;
while(true){
vec.add(new String("hello"));
i ++;
if (i % 10000 == 0)
{
System.out.println(i);
}
}

}
}



---------- java ----------
Hello World!
10000
20000
30000
40000
50000
60000
70000
80000
90000
100000
110000
120000
130000
140000
150000
160000
170000
180000
190000
200000
210000
220000
230000
240000
250000
260000
270000
280000
290000
300000
310000
320000
330000
340000
350000
360000
370000
380000
390000
400000
410000
420000
430000
440000
450000
460000
470000
480000
490000
500000
510000
520000
530000
540000
550000
560000
570000
580000
590000
600000
610000
620000
630000
640000
650000
660000
670000
680000
690000
700000
710000
720000
730000
740000
750000
760000
770000
780000
790000
800000
810000
820000
830000
840000
850000
860000
870000
880000
890000
900000
910000
920000
930000
940000
950000
960000
970000
980000
990000
1000000
1010000
1020000
1030000
1040000
1050000
1060000
1070000
1080000
1090000
1100000
1110000
1120000
1130000
1140000
1150000
1160000
1170000
1180000
1190000
1200000
1210000
1220000
1230000
1240000
1250000
1260000
1270000
1280000
1290000
1300000
1310000
1320000
1330000
1340000
1350000
1360000
1370000
1380000
1390000
1400000
1410000
1420000
1430000
1440000
1450000
1460000
1470000
1480000
1490000
1500000
1510000
1520000
1530000
1540000
1550000
1560000
1570000
1580000
1590000
1600000
1610000
1620000
1630000
1640000
1650000
1660000
1670000
1680000
1690000
1700000
1710000
1720000
1730000
1740000
1750000
1760000
1770000
1780000
1790000
1800000
1810000
1820000
1830000
1840000
1850000
1860000
1870000
1880000
1890000
1900000
1910000
1920000
1930000
1940000
1950000
1960000
1970000
1980000
1990000
2000000
2010000
2020000
2030000
2040000
2050000
2060000
2070000
2080000
2090000
2100000
2110000
2120000
2130000
2140000
2150000
2160000
2170000
2180000
2190000
2200000
2210000
2220000
2230000
2240000
2250000
2260000
2270000
2280000
2290000
2300000
2310000
2320000
2330000
java.lang.OutOfMemoryError
Exception in thread "main" Normal Termination
Output completed (4 sec consumed).
zealVampire 2005-01-22
  • 打赏
  • 举报
回复
好像连接池之类,流等的用完了 记得close
集合类的clear等
GJA106 2005-01-22
  • 打赏
  • 举报
回复
jvm中内存泄漏,这个词很少出现。按c/c++/vc的内存泄漏说法是指:开辟的变量(内存)在使用完之后,没有释放这个变量(内存),
导致系统资源耗尽。jvm中垃圾回收机制,开辟的变量(内存)在使用完之后没有释放,jvm会自动回收。一般在jvm中常见的类似状态是
数据库连接不关之类的操作。。。。。
iforem 2005-01-22
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3720/3720282.xml?temp=.5415003
加载更多回复(3)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧