社区
Java SE
帖子详情
压力测试的时候出现java.lang.OutOfMemoryError
yueguangkai001
2010-06-02 02:55:22
请教高手在做代码优化的时候发现有很多Swing的控件在关闭程序的时候没有置空,这会不会是在做压力测试时候OutOfMeoryError的真凶呢?
...全文
218
21
打赏
收藏
压力测试的时候出现java.lang.OutOfMemoryError
请教高手在做代码优化的时候发现有很多Swing的控件在关闭程序的时候没有置空,这会不会是在做压力测试时候OutOfMeoryError的真凶呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
java
.
lan
g.
OutOfMemoryError
异常及相关问题解决
错误提示 1.tomcat:
java
.
lan
g.
OutOfMemoryError
: PermGen space 2.tomcat:
java
.
lan
g.
OutOfMemoryError
:
Java
heap space 3.weblogic:Root cause of ServletException
java
.
lan
g.
OutOfMemoryError
4.resin:
java
.
lan
g....
java
.
lan
g.
OutOfMemoryError
异常解决方法
java
.
lan
g.
OutOfMemoryError
异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小;
java
.
lan
g.
OutOfMemoryError
:
Java
heap space
JAVA
HEAP SPACE解决方法和JVM参数设置 在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,
java
.
lan
g.
OutOfMemoryError
:
Java
heap space。 所以产生这个异样的原因通常有两种: 1.程序中
出现
了死循环 2.程序占用内存太多,超过了JVM堆设置的最大值。 对于第一种情况,需要自己查看程序代码,这里不再多说。 第二种情况,我们手工扩大JVM堆的参数设置。JVM堆的设置是指j
java
java
.
lan
g.
outofmemoryerror
,
java
.
lan
g.
OutOfMemoryError
学习笔记
在一年多的工作过程中,遇到该问题的印象最深有两次。一次是用hibernate查询数据时,一次查询过多的数据,例如30000条,此时程序出错,该死的
java
.
lan
g.OutMemoryError,后来调整了该部分的代码,每次只取出指定量的数据,成功的解决该问题。还有一次是当测试人员loadRunner做
压力测试
时,并发200个用户时,运行不到几分钟整个weblogic都瘫掉,真够狠的,又是
java
...
Java
内存溢出(
java
.
lan
g.
OutOfMemoryError
)的常见情况和处理方式总结
原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小; 常见错误提示: 1.tomcat:
java
.
lan
g.
OutOfMemoryError
: PermGen space 2.tomcat:
java
.
lan
g.
OutOfMemoryError
:
Java
heap space 3.weblo
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章