Java程序占用内存太高了怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java程序占用内存太高了怎么办?相关的知识,希望对你有一定的参考价值。

自己编的游戏程序,开始之后 10 多个线程一块启动,内存占用从 20,000 升到 300,000,CPU 使用率升到了50%,造成游戏时卡顿严重,求怎么解决。100分

    先看下是否有内存泄露,简单的方法就是隔一段时间检查下内存,看看是否是持续上升。

    然后看下资源是否可以优化,比如你加载的图片有没有resize过,尽可能减少资源的内存消耗。

    游戏卡顿最主要的是FPS帧率太低,把帧率统计输出来看下。检查下UI线程里或者OpenGL线程里是否做了I/O操作,这个是造成卡顿的主要原因。把I/O操作全部放入工作线程中,UI线程只做数据读取和渲染。这样帧率就可以提高了

追问

那个,我是 Java 新手,你说的我看懂了但是具体怎么做?
程序具体表现为点击 Start 按钮后内存瞬间上升 300,000K,但是没有再持续上升。
加载的图片都是用 JLabel.setIcon(icon); 的方式加载,并没有使用绘图工具,所以 resize 的方法该怎么用才好?还有些其他问题被限制字数了。

追答

点击start瞬间上升,那么说明你在点击start之前,初始化该做的没有做完吧,比如图片的加载。你初始化的时候把需要用的资源都先load进来,看看内存有多少,再点击start看看有没有内存暴涨

追问

运行就开始所有线程的话刚打开就是内存 320,000 K ,点击 Start 之后还是那么多。

追答

内存是资源造成的,可以看下图片资源在load进来的时候是不是还可以再把尺寸调小点。卡顿是I/O造成的,你看下UI线程里有没有做耗时的操作

追问

玩家 10*10 像素,AI 一样,子弹 2*2 像素的,只是玩家方向不同图片方向也不一样,AI 没有图片就一蓝色方块,子弹红色的。IO 是什么?

参考技术A 1.线程有无休眠时间
2.休眠时间的时长设置的是否合理。

我猜测你的程序是要不停的运行来实现某种功能。这要休眠时间的设定就显得很重要了。

还有就是你的功能中是否有IO,是否有耗内存的代码块,这些要看具体的才行。单纯是线程的话,注意上面两点就可以了。追问

另外 FPS 我估计也就 2-3 的样子……

参考技术B 这个具体要看代码. java 本身不会占用太多

以上是关于Java程序占用内存太高了怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

我的 iPhone 应用程序应该占用多少内存?

openjdk占cpu高怎么处理

电脑一般内存使用率多少为正常?

java cpu占用高,该怎么处理

java cpu占用高,该怎么处理

请问用Java代码,怎样测试一段程序占用了多少内存?