从代码中找到运行时可用的内部存储器

时间:2011-05-23 09:28:25

标签: java android sqlite memory-management

我必须在运行时从代码中找到可用的内部内存,因为当我将内部手机内存降低到100K以下时,由于磁盘空间不足,sqlite操作会在每个数据库操作上抛出SQLiteDiskIOException

任何想法?

clahav

3 个答案:

答案 0 :(得分:3)

在这种情况下,使用嵌入式数据库似乎有点过分,因为RAM数量较少,因此环境较弱。我宁愿选择像

这样的流行层

您将通过JDBC(事务,SQL)丢失一些功能,但可以降低内存消耗。

答案 1 :(得分:1)

调用Runtime.getRuntime().freeMemory()可以估算可用内存量。但是,它不是一个特别有用的措施,因为您很有可能分配比报告的值更多的内存。当您尝试分配比当前空闲内存更多的内存时,JVM将自动运行GC以尝试回收足够的空间进行分配,这通常会成功。

>通过调用System.gc()来“请立即”运行GC,但从性能角度来看,这通常是糟糕的主意。如果您只是让JVM在需要时运行GC,那么GC最有效(就每个字节回收的时间而言)。运行GC的唯一情况是,如果您知道在特定点有备用CPU周期并且想要缓解GC暂停。


在您的特定情况下,我不确定知道有多少可用内存有什么优势。你为什么不尝试sqlite操作并捕获/处理异常?或者增加堆大小?或者追踪什么是泄漏内存或低效使用它?

答案 2 :(得分:0)

Runtime rt=Runtime.getRuntime();
rt.freeMemory()

调用System.gc()可能会增加可用的可用内存