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

Java 在内存中保存数据和将数据写入驱动器之间是否存在最佳点?,java,gps,java-me,midlet,Java,Gps,Java Me,Midlet,我正在为我未使用的J2ME SE Hazel j20i开发J2ME应用程序(使用SDK 3.4),以便通过定位API记录GPS数据 CLDC1.1、MIDP2.1和JSR-75都不提供java.io.BufferedWriter。 所以我是手工做的 我必须存储多少GPS读数(GPS记录将无限期运行,直到停止) 在内存(变量)中,直到我必须将其写入磁盘 什么对性能最好?知道写/读硬盘驱动器(SD卡等)的成本高于写/读内存(RAM),我建议您在收集GPS数据时跟踪可用内存,并定义一个阈值将数据写入硬

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

CLDC1.1、MIDP2.1和JSR-75都不提供java.io.BufferedWriter。 所以我是手工做的

我必须存储多少GPS读数(GPS记录将无限期运行,直到停止) 在内存(变量)中,直到我必须将其写入磁盘


什么对性能最好?

知道写/读硬盘驱动器(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能够完成这项工作,并且不会耗尽内存。不需要提醒您必须处理内存不足的情况!祝你今天愉快

知道写/读硬盘驱动器(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能够完成这项工作,并且不会耗尽内存。不需要提醒您必须处理内存不足的情况!祝你今天愉快

我想对于GPS记录器来说,性能并不重要,您每秒钟都会得到位置更新(我想最好是使用Hazel内部GPS接收器),因此数据量很低。但缓冲写入可以节省电源并延长电池寿命


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

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

我将以4k(或SD的分配单元大小)的倍数缓冲输出,最多64k,并执行块写入。使用更大的缓冲区,当midlet崩溃时,您将丢失更多数据:)