Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java me 如何计算J2me中某些类型的对象_Java Me - Fatal编程技术网

Java me 如何计算J2me中某些类型的对象

Java me 如何计算J2me中某些类型的对象,java-me,Java Me,我需要知道在任何时候我的系统中存在多少种类型的对象。构造函数/分发器中带有静态变量和递增/递减的标准方法不起作用,因为缺少Object.finalize方法。在标准Java中,可以使用WeakReference,但在J2ME中不可用。此外,没有标准API来枚举所有对象。在Java中实现这一点的“最简单”方法是编写一个垃圾收集器 因此,您唯一的选择是在Java IDE中运行代码,该IDE可以在运行时进行评测,也可以手动处理对象的销毁,这样您就可以对它们进行计数。如果您在运行时需要它,并且希望将它作

我需要知道在任何时候我的系统中存在多少种类型的对象。构造函数/分发器中带有静态变量和递增/递减的标准方法不起作用,因为缺少Object.finalize方法。

在标准Java中,可以使用
WeakReference
,但在J2ME中不可用。此外,没有标准API来枚举所有对象。在Java中实现这一点的“最简单”方法是编写一个垃圾收集器


因此,您唯一的选择是在Java IDE中运行代码,该IDE可以在运行时进行评测,也可以手动处理对象的销毁,这样您就可以对它们进行计数。

如果您在运行时需要它,并且希望将它作为应用程序的一部分以编程方式进行处理,这非常困难,否则您可以对它们进行分析。然后,您将知道当前使用了多少对象的实例(即堆上)

作为蛮力答案,您可以使用特殊的单例工厂生成所有对象,在生成新对象时,您可以在其中增加计数,并通过此工厂将其删除以:

Object newOne = ObjectsFactory.getInstance().getNewObject(); // in this method count++
...
...
// we don`t need newOne anyMore
ObjectsFactory.getInstance().releaseObject(newOne); // here count--
newOne = null;  // let gc do its work.

这种方法不会给出确切的结果,但会给出全面的结果。

您不能使用这些反射内容,因为J2me不支持它


唯一的赌注是在WTK/bin/prefs下启用探查器。那里还有一个内存监视器。

只是想知道为什么需要这样做……为了优化目的?在我使用的移动平台上,GarbageCollector工作非常不稳定,我怀疑系统对象(SocketConnection)泄漏,您需要使用三星SDK的原因是什么?你可以通过标准WTK评测你的应用程序,你应该会收到类似的结果。就精确的时间/处理数据而言,显然不是100%兼容,但我也不相信模拟器。