- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个要求,我需要检查文件“A”中的行数,如果文件“A”超出了我的限制,那么我需要将其内容复制到另一个文件“B”中,然后清除内容文件“A”。
上面的任务我必须一直执行所以,我构建了“服务”来完成这个任务。 (我想在后台运行它)。
我正在从服务中启动一个线程来执行上述任务。(我在服务中还有其他任务应该与任务并行运行)。
我正在使用 AlarmManager 使我的“服务”保持 Activity 状态。
底线是上述任务将一直运行。到目前为止,我成功地实现了我想要实现的目标。
但我在 LogCat 输出中观察到它正在生成与 GC 相关的大量语句。
喜欢:
D/dalvikvm( 2579): GC_CONCURRENT freed 483K, 62% free 2608K/6727K, external 1628K/2108K, paused 2ms+2ms
D/dalvikvm( 2579): GC_CONCURRENT freed 469K, 62% free 2608K/6727K, external 1628K/2108K, paused 34ms+2ms
D/dalvikvm( 2579): GC_CONCURRENT freed 466K, 62% free 2608K/6727K, external 1628K/2108K, paused 1ms+2ms
D/dalvikvm( 2579): GC_CONCURRENT freed 472K, 62% free 2609K/6727K, external 1628K/2108K, paused 7ms+2ms
D/dalvikvm( 2579): GC_CONCURRENT freed 473K, 62% free 2607K/6727K, external 1628K/2108K, paused 2ms+1ms
D/dalvikvm( 2579): GC_CONCURRENT freed 473K, 62% free 2607K/6727K, external 1628K/2108K, paused 1ms+2ms
D/dalvikvm( 263): GC_EXPLICIT freed 351K, 58% free 3118K/7303K, external 10278K/11844K, paused 42ms
我怀疑我的应用程序泄漏了一些内存或正在消耗大量内存。关于性能,我想避免这种情况。下面是我一直在线程中运行的代码 fragment 。
public void run()
{
while (true) {
if (WifiLogCollector.stoopThread)
return;
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(textfile));
lineNumberReader.skip(Long.MAX_VALUE);
if ((lineNumberReader.getLineNumber()) > 20000) {
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream("/mnt/sdcard/textfile.txt").getChannel();
destination = new FileOutputStream("/mnt/sdcard/textbackupfile.txt")
.getChannel();
destination.transferFrom(source, 0, source.size());
} finally {
if (source != null) {
source.close();
source = null;
}
if (destination != null) {
destination.close();
destination = null;
}
}
PrintWriter writer = new PrintWriter(/mnt/sdcard/textfile.txt);
writer.print("");
writer.close();
writer = null;
}
lineNumberReader.close();
lineNumberReader = null;
}
}
以上是我线程的run()方法
请帮助我在我的设计中应该做哪些更改以避免 GC 日志并提高我的应用程序内存效率。
最佳答案
您在循环中创建了太多"new"对象,这导致 GC 在您将它们清空后疯狂地清理它们。您想让它们成为静态类变量,而不是新的局部变量,这样您就可以继续使用相同的对象。
关于java - 如何防止 Logcat 中的 GC_CONCURRENT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110351/
我找到了dalvikvm的源码,但是找不到并发GC调用的地方。 我从android git 仓库中得到的malloc 代码 static void gcForMalloc(bool clearSoft
我正在使用一个线程,该线程使用 AudioRecord 类记录音频并放置在 recorderBUffer(它是 Short[] 的链表)中,一个单独的线程对这些数据进行编码并将其放置到 playerB
首先,抱歉我的英语水平。 我需要一些帮助。我正在尝试开发一个应用程序(一个单击按钮即可听到声音的音箱)。我没有问题,但听了一些歌后,我的内存力出现了问题。这是我的日志: enter code here
有人能告诉我为什么会出现这些内存泄漏吗?它发生在启动画面需要自行完成时(基本上称为新 Activity )当我在菜单中单击按钮打开新页面(新 Activity )时,它再次发生。 记录猫内存泄漏: 启
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便可以重新打开它,visit the help center
我正在尝试探索 GingerBread (2.3) 中新的并发垃圾收集器的行为。 有人可以详细解释这些示例日志行(尤其是 GC_CONCURRENT 和 GC_FOR_MALLOC 的“暂停”部分)吗
我在 LogCat 中收到大量 GC_CONCURRENT 已释放的消息,它们不是来 self 自己的应用程序(我强行关闭了我的应用程序以确保)。释放的内存非常一致(大约 1430K),每秒大约发生
我的问题 我有一个计时器,它像这样初始化并调用一个方法来更新对象。问题是每次触发计时器时我都会在我的 LogCat 中得到 GC_CONCURRENT 输出。 11-01 11:56:43.042:
我有一个应用程序,它总是一张一张地加载一些图像(不是一起)。每次我加载新图像时,都会出现垃圾收集器的消息,因为我知道该设备正在做太多工作。我能做些什么来解决这个问题?我知道如果此问题继续存在,应用程序
我正在为 Android 编写一个小日历应用程序,我需要 Calendar 类包含的一些功能(例如:计算月份的第一天、当前日期、下个月的日期、年份特定的 Unix 时间戳等) 这些函数被频繁调用并且它
我正在使用以下方法通过电话号码提取联系人姓名和缩略图。当它运行时,GC 会发疯。 Methos 在实用程序类中,并从适配器调用以填充 ListView 。列表有超过 20 个项目/数字来查询联系人数据
我有一个要求,我需要检查文件“A”中的行数,如果文件“A”超出了我的限制,那么我需要将其内容复制到另一个文件“B”中,然后清除内容文件“A”。 上面的任务我必须一直执行所以,我构建了“服务”来完成这个
我是一名优秀的程序员,十分优秀!