2009-01-22 24 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/

相關問題