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 的样子……
以上是关于Java程序占用内存太高了怎么办?的主要内容,如果未能解决你的问题,请参考以下文章