2009-01-22 78 views
2

我正在对应用程序进行一些性能调优,并想知道测量我通过RMI发送的对象大小的好方法。我如何测量通过RMI发送的对象的大小?

目的是为了让我的对象精简。

+0

的一种方式。确保你也使用transient来填充你不想序列化的字段。编写你自己的readObject/writeObjects,并实现一个版本控制系统。 – Fortyrunner 2009-01-22 10:24:47

回答

0

做到这一点,最简单的方法是把一些测试代码的对象写入到文件中。然后,看看文件的大小。

,或者,如果你不想写入到磁盘(和你的对象都不会吹出来的内存):

ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bout); 
oos.writeObject(theObjectIWantTheSizeOf); 
oos.close(); 
System.out.println("The object size is: " + bout.toByteArray().length: 
0

因为你的对象是可序列化已经 - 您可以使用ObjectOutputStream的大小()方法来做到这一点。

+0

ObjectOutputStream没有大小的方法 - 你可能想澄清你的意思。 – McDowell 2009-01-22 11:38:09

+0

我的意思是ByteArrayOutputStream - 感谢您的更正。 – Fortyrunner 2009-01-22 11:56:41

+0

唉,看着它,这种机制是不可靠的 - 见我的帖子。 – McDowell 2009-01-22 12:02:07

0

这是不够的 - 类也可以被发送作为其实例的序列化形式。

该类只应发送一次,它将是它在磁盘上的大小。 你只发送一次或多次发送该对象?如果后者的规模不应该很重要。

0

你需要检查你正在使用的第一件事RMI协议。如果您使用的是EJB 3它可能会调用CORBA(RMI-IIOP)。如果要提高性能,可以使用RMI过压IOP(ZIOP) - GIOP的压缩版本,可降低带宽使用量。请尝试将目标精简为使用常用字符串枚举的http://docs.jboss.org/jbossremoting/2.5.2.SP2/html_single/