我正在对我的应用程序进行一些性能调整,并且想知道一种测量通过 RMI 发送的对象大小的好方法。
目的是使我的对象更精简。
因为您的对象已经是可序列化的 - 您可以使用 ObjectOutputStream 上的 size() 方法来执行此操作。
最简单的方法是放入一些将对象写入文件的测试代码。然后,查看文件的大小。
或者,如果您不想写入磁盘(并且您的对象不会耗尽内存):
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bout);
oos.writeObject(theObjectIWantTheSizeOf);
oos.close();
System.out.println("The object size is: " + bout.toByteArray().length:
这还不够——可以发送类及其实例的序列化形式。
该类应该只发送一次,它将是它在磁盘上的大小。您是只发送对象一次还是多次?如果是后者,班级的规模应该不重要。
您需要首先检查您使用的 RMI 协议。如果您使用的是EJB 3,它可能会调用 CORBA (RMI-IIOP)。如果您想提高性能,可以使用 RMI over-Zipped IOP ( ZIOP ) — GIOP 的压缩版本,可减少带宽使用。试试http://docs.jboss.org/jbossremoting/2.5.2.SP2/html_single/
几个月前,我在Javaspecialist网站上发现了这篇文章Instrumentation Memory Counter,关于计算 Java 对象的内存使用情况。也许它对你有帮助。