Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 如何测量通过RMI发送的对象的大小?_Java_Performance_Rmi - Fatal编程技术网

Java 如何测量通过RMI发送的对象的大小?

Java 如何测量通过RMI发送的对象的大小?,java,performance,rmi,Java,Performance,Rmi,我正在对我的应用程序进行一些性能调整,希望知道一种测量通过RMI发送的对象大小的好方法 其目的是使我的对象更精简。因为您的对象已经可以序列化了-您可以使用ObjectOutputStream上的size方法来实现这一点 因为您的对象已经可以序列化了-您可以使用ObjectOutputStream上的size方法来实现这一点 几个月前,我在网站上找到了这篇关于计算Java对象内存使用量的文章。也许这会对您有所帮助。几个月前,我在网站上找到了这篇关于计算Java对象内存使用率的文章。也许它会对您有所

我正在对我的应用程序进行一些性能调整,希望知道一种测量通过RMI发送的对象大小的好方法


其目的是使我的对象更精简。

因为您的对象已经可以序列化了-您可以使用ObjectOutputStream上的size方法来实现这一点

因为您的对象已经可以序列化了-您可以使用ObjectOutputStream上的size方法来实现这一点

几个月前,我在网站上找到了这篇关于计算Java对象内存使用量的文章。也许这会对您有所帮助。

几个月前,我在网站上找到了这篇关于计算Java对象内存使用率的文章。也许它会对您有所帮助。

最简单的方法是输入一些将对象写入文件的测试代码。然后,查看文件的大小

或者,如果您不想写入磁盘,并且您的对象不会耗尽内存:

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

最简单的方法是输入一些测试代码,将对象写入文件。然后,查看文件的大小

或者,如果您不想写入磁盘,并且您的对象不会耗尽内存:

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协议。如果您使用的是EJB3,那么它可能会调用CORBA RMI-IIOP。如果你想提高性能,你可以使用RMI-over-Zipped IOP-ZIOP,这是GIOP的压缩版本,可以减少带宽使用。尝试

您需要首先检查您使用的RMI协议。如果您使用的是EJB3,那么它可能会调用CORBA RMI-IIOP。如果你想提高性能,你可以使用RMI-over-Zipped IOP-ZIOP,这是GIOP的压缩版本,可以减少带宽使用。尝试

使对象更精简的一种方法是对常用字符串使用枚举。确保对不希望序列化的字段也使用transient。编写您自己的readObject/WriteObject,并实现版本控制系统。@FortyRunner,它不会更改任何内容。枚举被序列化为它们自己的名称,即字符串。编写自己的读/写对象方法可能有帮助,也可能没有帮助,自定义版本控制肯定不会有帮助。版本控制已经内置。您的建议只是临时的。应该更清楚:使用自定义writeobject-发送一个整数,readObject只需要从整数中重新水化。使对象更精简的一种方法是对常用字符串使用枚举。确保对不希望序列化的字段也使用transient。编写您自己的readObject/WriteObject,并实现版本控制系统。@FortyRunner,它不会更改任何内容。枚举被序列化为它们自己的名称,即字符串。编写自己的读/写对象方法可能有帮助,也可能没有帮助,自定义版本控制肯定不会有帮助。版本控制已经内置。你的建议只是暂时的。应该更清楚:使用自定义writeobject-发送一个整数,readObject只需要从整数中重新水化。ObjectOutputStream上没有size方法-你可能想澄清你的意思。我是说ByteArrayOutputStream-谢谢你的更正。唉,仔细研究一下,此机制不可靠-请参阅我的帖子。ObjectOutputStream上没有大小方法-您可能想澄清您的意思。我是指ByteArrayOutputStream-感谢您的更正。唉,仔细研究一下,此机制不可靠-请参阅我的文章。这还不够-可能会发送类及其实例的序列化形式。@McDowell这不正确。类未序列化。这还不够-可能会发送该类及其实例的序列化形式。@McDowell这不正确。类未序列化。与您引用的错误语句相反,类根本未序列化。@EJP根据RMI的设置方式可以传输类的字节码。与您引用的错误语句相反,类根本未序列化。@EJP根据RMI的设置方式可以传输类的字节码。