【发布时间】:2012-07-31 22:10:49
【问题描述】:
我在 Java ME 环境中编写代码,所以速度绝对是一个重要因素。我已经阅读了几个地方,任何类型的反射(即使是 Java ME 上允许的非常有限的数量)都可能是一个非常大的瓶颈。
所以,我的问题是:做String.class.getName() 慢吗? myCustomObject.getClass().getName() 呢?用“java.lang.String”和“com.company.MyObject”等字符串常量替换它们会更好吗?
如果您想知道,我需要所有基元(以及非基元)的类名,因为 Java ME 不提供默认的序列化实现,因此我必须自己实现。我需要一个通用的序列化解决方案,它既适用于跨网络的通信,也适用于本地存储(RMS,也适用于 JSR-75)
编辑
我正在使用 Java 1.3 CLDC。
【问题讨论】:
-
你试过基准测试吗?
-
如果你知道一个对象的类,那么问它是没有意义的。 String.class.getName() 可以替换为“java.lang.String”。如果你不知道一个对象的类型,你不问怎么能知道?先写吧。措施。当且仅当您遇到问题时,找出问题的根源,并在需要的地方进行优化。
-
我想对它进行基准测试,但我的项目目前处于混乱状态,我需要几个小时(可能是几天)才能让这段代码进入编译并再次运行的状态。现在我将使用常量(谢谢大家),但稍后我会回来提供基准测试信息。
-
你打算连载什么?远程通信或持久性到 rms / 文件或其他东西?
-
“我在 Java ME 环境中编写代码,所以速度绝对是一个重要因素。”——在这个优化级别上可能是错误的。分析/基准测试结果是速度一直很重要的唯一原因。
标签: java serialization reflection java-me cldc