在内存中保存数据和将其写入驱动器之间是否存在最佳点?

时间:2016-02-08 15:02:34

标签: java gps java-me midlet

我正在为未使用的J2ME SE Hazel j20i开发J2ME应用程序(使用SDK 3.4),以通过Location API记录GPS数据。

CLDC 1.1,MIDP 2.1和JSR-75都不提供java.io.BufferedWriter。 所以我手动完成。

我需要存储多少GPS读数(GPS记录将无限期运行直至停止)  在内存(变量),直到我必须在磁盘上写它?

什么是最佳表现?

2 个答案:

答案 0 :(得分:2)

知道写/读硬盘(SD卡等)的成本比写入/读取内存(RAM)要多得多我建议您在收集GPS数据时跟踪可用内存,并定义写入数据的阈值到硬盘。我不能告诉你什么是最佳阈值。您可以像这样跟踪记忆:

 long totalMemory = Runtime.getRuntime().totalMemory();
 long freeMemory = Runtime.getRuntime().freeMemory();
 if(threshold > freeMemory)
     //1-write to hard drive
     //2-make sure you use the proper mechanism to help the 
     //garbage collector (GC) do its job. ex: reinitialize your data structures, set them to null ... 

请注意,在清除内存之前GC可能需要一些时间,您还需要正确处理,因为在清除数据结构后,您的空闲内存不会立即变大,之前可能会达到零但希望GC能够做到这份工作,你不会失去记忆。不需要提醒您必须处理内存不足的情况!祝你今天愉快。

答案 1 :(得分:0)

我认为对于GPS记录器性能并不重要,你每秒都会获得位置更新(最好是使用Hazel内部GPS接收器,我假设),因此数据量很低。但缓冲写入可以节省电力并延长电池寿命......

我会以4k(或SD的分配单元大小)的倍数缓冲输出,最多,比如64k,然后进行块写操作。使用更大的缓冲区,当midlet崩溃时,您会丢失更多数据:)