压力测试的时候出现java.lang.OutOfMemoryError

yueguangkai001 2010-06-02 02:55:22
请教高手在做代码优化的时候发现有很多Swing的控件在关闭程序的时候没有置空,这会不会是在做压力测试时候OutOfMeoryError的真凶呢?
...全文
218 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueguangkai001 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cosmos1984 的回复:]
^_^你还是没明白我的意思,我是说applet是在客户端运行的,不会给你的服务器增加什么负载
[/Quote]
如果跟服务端建立了Socket通讯呢?那就应该另当别论了吧
非典型射手 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yueguangkai001 的回复:]

你说的也有道理,有可能是跟服务器交互的时候资源没有释放,但是我感觉OutofMeoryError貌似主要是因为创建的大量的类没有被gc回收从而出现的

但是我非常不同意你说 swing和applet没有任何关系,
applet里面就不能够加载swing的组建么?难道applet就只能够用awt的组建么
[/Quote]

^_^你还是没明白我的意思,我是说applet是在客户端运行的,不会给你的服务器增加什么负载
yueguangkai001 2010-06-03
  • 打赏
  • 举报
回复
你说的也有道理,有可能是跟服务器交互的时候资源没有释放,但是我感觉OutofMeoryError貌似主要是因为创建的大量的类没有被gc回收从而出现的

但是我非常不同意你说 swing和applet没有任何关系,
applet里面就不能够加载swing的组建么?难道applet就只能够用awt的组建么


非典型射手 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yueguangkai001 的回复:]

引用 13 楼 cosmos1984 的回复:

客户端的东西怎么会有压力,即使是applet也是在客户端运行的,跟服务端一毛钱关系都没有

问下,在一个网页中,打开applet所在的网页,关闭applet所在的网页,这样重复做几个小时,JVM就出现了OutOfMeoryError的错误,难道这不算是压力测试的一种么?
[/Quote]

那也跟swing没关系,swing是运行在客户端的。你的压力可能来自客户端发送到服务器的请求,服务器处理时有资源没有释放。但是跟swing和applet绝对没有关系
yueguangkai001 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cosmos1984 的回复:]

客户端的东西怎么会有压力,即使是applet也是在客户端运行的,跟服务端一毛钱关系都没有
[/Quote]
问下,在一个网页中,打开applet所在的网页,关闭applet所在的网页,这样重复做几个小时,JVM就出现了OutOfMeoryError的错误,难道这不算是压力测试的一种么?
非典型射手 2010-06-03
  • 打赏
  • 举报
回复
客户端的东西怎么会有压力,即使是applet也是在客户端运行的,跟服务端一毛钱关系都没有
Java技术栈 2010-06-03
  • 打赏
  • 举报
回复
顶起了
yueguangkai001 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yidinghe 的回复:]

条件允许的情况下增加内存参数应该能解决问题。不行的话,

要养成好的编程习惯:
1、尽量使用变量和参数,不要随什么东西都定义成类的成员。这是因为成员很难回收,而方法内的变量和参数能马上回收。
2、特别注意容器对象,因为对象一旦放入容器,只有当容器本身被回收之后它才会被回收,否则就一直占用内存。
3、注意流对象是否及时关闭。
[/Quote]
谢谢提醒,这些我在以后的编成中会注意的
yueguangkai001 2010-06-03
  • 打赏
  • 举报
回复
我现在郁闷的是,现在的代码是以前别人写的,现在由我来维护,一个人呢全部都在销毁的时候将对象置null
一个人呢,所有的都没有置null
所以现在就是这套代码我到底是怎么去维护
龙四 2010-06-03
  • 打赏
  • 举报
回复
不需要写x=null!

[Quote=引用 5 楼 yueguangkai001 的回复:]

引用 2 楼 dr_lou 的回复:

Swing不都是单机版的么,怎么还有压力?

推荐jdk自带的jvisualvm.exe配合压力测试使用,可以找到内存泄露的根源。

是applet放到网页中撒

有jvisualvm.exe JDK 啥子版本的,

我只想问下,没有置为null,CG就不去回收么?
[/Quote]
非典型射手 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yueguangkai001 的回复:]

引用 17 楼 cosmos1984 的回复:
^_^你还是没明白我的意思,我是说applet是在客户端运行的,不会给你的服务器增加什么负载

如果跟服务端建立了Socket通讯呢?那就应该另当别论了吧
[/Quote]

怪我刚才没说明白,我们不是一直再说swing的问题么。。。swing一定是在客户端运行的,你服务端的问题绝对跟swing释没释放没有关系
捏造的信仰 2010-06-02
  • 打赏
  • 举报
回复
条件允许的情况下增加内存参数应该能解决问题。不行的话,

要养成好的编程习惯:
1、尽量使用变量和参数,不要随什么东西都定义成类的成员。这是因为成员很难回收,而方法内的变量和参数能马上回收。
2、特别注意容器对象,因为对象一旦放入容器,只有当容器本身被回收之后它才会被回收,否则就一直占用内存。
3、注意流对象是否及时关闭。
yueguangkai001 2010-06-02
  • 打赏
  • 举报
回复
刚刚看到

火龙果的 说 :"

内存溢出与内存泄漏是两回事!

内存溢出是指内存不够用了

而内存泄漏指的是指代码中使用内存指针访问了一块不该访问的空间,像 Windows 上经常会有 0xXXXXXX 内存不为 read/write 就是典型的内存泄漏。"

所以来纠正一个词 就是内存溢出而不是泄露了
yueguangkai001 2010-06-02
  • 打赏
  • 举报
回复
没有道理不回收啊,但是不知道是不是这个地方导致的内存泄露,因为在页面加载applet的时候不停的关闭打开,测了几个小时就出现了,基本上每隔半分钟关闭打开一次,而居我观察,JVM好像在关闭applet所在的时候并没有关闭,而是必须打开applet的相关页面都关闭的时候才关闭
dr_lou 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yueguangkai001 的回复:]
引用 2 楼 dr_lou 的回复:

Swing不都是单机版的么,怎么还有压力?

推荐jdk自带的jvisualvm.exe配合压力测试使用,可以找到内存泄露的根源。

是applet放到网页中撒

有jvisualvm.exe JDK 啥子版本的,

我只想问下,没有置为null,CG就不去回收么?
[/Quote]

我的是1.6 1.5可能也有吧。
不设置为null也是可以的,GC不会弱智到只回收指向null的对象的。

我只想问下,没有置为null,CG就不去回收么?
yueguangkai001 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lrbyantai 的回复:]

呃,Swing,老眼昏花了!!
[/Quote]
有的系统Swing也是一个不错的选择
yueguangkai001 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dr_lou 的回复:]

Swing不都是单机版的么,怎么还有压力?

推荐jdk自带的jvisualvm.exe配合压力测试使用,可以找到内存泄露的根源。
[/Quote]
是applet放到网页中撒

有jvisualvm.exe JDK 啥子版本的,

我只想问下,没有置为null,CG就不去回收么?
蛋黄车 2010-06-02
  • 打赏
  • 举报
回复
呃,Swing,老眼昏花了!!
蛋黄车 2010-06-02
  • 打赏
  • 举报
回复
也不尽然吧,和web服务器的性能也有关系的吧
dr_lou 2010-06-02
  • 打赏
  • 举报
回复
Swing不都是单机版的么,怎么还有压力?

推荐jdk自带的jvisualvm.exe配合压力测试使用,可以找到内存泄露的根源。
加载更多回复(1)

62,614

社区成员

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

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