我想知道是否有可能调整垃圾收集器在JavaMe上的工作方式,以便以某种方式提高性能(可能会减少段落数量)?我看过一些关于它的文章,但主要是针对Java SE,其中大多数人都说GC高度依赖于制造商。那将是多少。
答案 0 :(得分:3)
当垃圾收集器被触发时,除非您掌握了运行应用程序的特定VM的实施方式,以及为您使用的特定电话配置和定制的具体方式,否则很大程度上是一种谜。
调用java.lang.System.gc()并不能保证触发垃圾收集器。它通常只会很快增加VM启动垃圾收集的可能性。
我发现在相同的线程中连续3次调用System.gc()但是从3种不同的方法调用相当好。
有许多方法可以解决JavaME标准API实现中的不足之处,以减少您生成的垃圾量:
扩展ByteArrayOutputStream,以便在您想要访问数据时不创建字节数组的副本。
避免调用StringBuffer.getChars()和StringBuffer.toString()。使代码适用于StringBuffer偏移和长度。
将本地缓冲区(byte [],StringBuffer ...)转换为实例或静态变量(并使用synchronized保护它们)。显然,执行此操作会产生开销,但它可以防止应用程序因垃圾收集过于频繁而冻结。
扩展StringBuffer以避免在String和StringBuffer之间来回切换:实现append(String,offset,length),parseInt(int),indexOf(String,index),replace(offset,StringBuffer,offset,length )...
...
答案 1 :(得分:1)
我没有看到任何可能的方法来调整J2ME中的垃圾收集行为。
如果您遇到垃圾收集引起的暂停问题,您必须做两件事:
答案 2 :(得分:0)
感谢所有输入人员。我已经看到不可能为支持Java Me的设备调整GC。至少不是以任何简单或有用的方式。无论如何我都会打开这个问题,以防这种情况在某种程度上发生变化。 :)