请问 Java 怎么防止内存溢出?

2020-09-15 10:54:06 +08:00
 youla

请问遇到这种情况怎么防止内存溢出?

Test t=new Test();
t.start();
//没有找到关闭以及释放资源的方法

4258 次点击
所在节点    Java
26 条回复
securityCoding
2020-09-15 10:56:38 +08:00
创建一个相同路径的类,覆盖掉它
dijia478
2020-09-15 11:00:57 +08:00
内存溢出?看楼主贴的代码,应该是内存泄漏导致的吧,做好高可用,然后定时重启服务。庞大的系统都是通过这种方式解决的。
youla
2020-09-15 11:01:31 +08:00
@securityCoding 这个类里面本身就 new 了很多类,也适用吗!
youla
2020-09-15 11:05:25 +08:00
@dijia478 不让重启,要 24 小时运行,崩溃,是监控。。
wande6
2020-09-15 11:28:02 +08:00
使用钞能力,加硬件怼
dovme
2020-09-15 12:42:23 +08:00
加内存,加到它泄漏 100 年内存都用不完,不就好了?
lewis89
2020-09-15 12:56:48 +08:00
上集群副本啊,溢出重启让其它的副本顶上..
nomansky
2020-09-15 12:58:11 +08:00
这不是叫内存泄露么…gc 回收不了就只能重启了
THESDZ
2020-09-15 14:09:58 +08:00
多副本,滚动重启
fhsan
2020-09-15 14:29:27 +08:00
多个副本,监控自动重启,加内存加机器根本不可取
hecz
2020-09-15 15:34:40 +08:00
@youla 分批部署都不行?
kingfalse
2020-09-15 16:37:28 +08:00
1 》 sh 脚本里面写个死循环执行 java -jar ,
2 》程序里面 new Thread 然后 sleep 一个小时,然后 exit

反正就是等他内存崩之前,你先自杀重启,完美符合题意.
手动狗头保命 /doge/doge/doge
Marine5174
2020-09-15 17:16:27 +08:00
LZ dump heap 了吗? 确定是这个类泄漏造成的内存溢出吗?
securityCoding
2020-09-15 17:17:58 +08:00
@youla 直接上字节码增强吧 , 实现原理参考一下 arthas 源码
youla
2020-09-15 17:21:15 +08:00
@Marine5174 我确定!我在寻找一个解决办法,希望能找到或者记录这个类从实例化到调用产生出来的新事物,然后结束时一并释放。
youla
2020-09-15 17:22:38 +08:00
@fhsan
@THESDZ
@lewis89 不用规避的手段!!
lewis89
2020-09-15 17:30:29 +08:00
@youla #16 不规避.. 老哥这种陈年烂项目 不用这么上心
THESDZ
2020-09-15 17:43:15 +08:00
那就把这个内部改为线程池,限制他的内存,改造会导致什么问题,得看具体代码和业务
youla
2020-09-15 18:03:54 +08:00
@lewis89 产生了相应的需求,不得不做
araaaa
2020-09-15 18:38:36 +08:00
定时重启

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX