gpt4 book ai didi

java - 如何防止 Logcat 中的 GC_CONCURRENT 语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:39 25 4
gpt4 key购买 nike

我有一个要求,我需要检查文件“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com