Willem Elbers, Frank Koopmans and Ken Madlener Radboud Universiteit Nijmegen December 2004
Abstract Java and .Net are both widely used for creating Middleware solutions. There are many interesting aspects which can be compared between Java and .Net. In this paper we examine the architecture of Java RMI and .Net Remoting and test theirperformance as they come ”out-of-the-box”. The performance was measured over a series of 3 different tests using .Net and Java’s high performance timers and our own modules to measure CPU utilization and Memory usage. In all our tests Java RMI had the best performance times.
The creation of software has been evolving strongly over the past few years. High level programminglanguages are increasingly popular amongst software developers because there is a great need for software quality and lower development times, while not compromising on performance. Also, the Internet has become increasingly popular and the need for networking applications is greater then ever. Java and .Net are both widely used for creating Middleware solutions. There are many interesting aspectswhich can be compared between Java and .Net, this paper focuses speciﬁcally on Middleware performance. First there will be an overview of the Java and .Net middleware implementations, Java RMI and .Net Remoting. These will be described on an abstract level which will help understanding and explaining the results of the performance measurement later on. After the introduction of Java and .Netmiddleware, their performance measurement will be introduced. An overview of which measurements were done, and why, followed by the results of these measurements will reveal the performance aspects of Java and .Net middleware. By looking back at the architecture of both Java and .Net Middleware, conclusions can be drawn about the consequences for performance.
2 Java and .Net middleware explained
Thereare many differences and similarities between Java RMI and .Net Remoting. This chapter introduces the general architecture of both and a few differences which are relevant to the performance aspect of middleware.
.Net Remoting and Java RMI in general
.Net Remoting and Java RMI are mechanisms which allow the user to invoke methods in another address space. The other address spacecould be on the same machine or a different one. These two mechanisms can be regarded as RPC in an object-oriented fashion. • When the client object calls a method on the server object, a proxy 2
passes the call information to the RPC system on the client. This system in turn sends the call over the channel to the Remoting system on the server. • The RPC system on the server receives the callinformation and, on the basis of it, invokes the method on the actual object on the server (creating the object if necessary). • The RPC system on the server collects the result of the method invocation and passes it back to the client through the connection of the RPC system on of the client. • The RPC system at the client receives the server’s response and returns the results to the client objectthrough the proxy. Distributed objects Java and .Net use distributed objects, these are objects whose instances can be used remotely, they can be referenced in two different ways: • Within the address space where the object was constructed; The object is an ordinary object which can be used like any other object. • Within other address spaces (remote); The object can be referenced using an objecthandle, and is treated like a remote interface. For the most part object handles can be used in the same way as an ordinary object. Java and .Net distribute their objects in the same way, but the terminology is different. .Net named their remote objects Remote Interfaces while Java mostly speaks of Remote Classes.
.Net Remoting and Java RMI differences
The following differences...