Abstract
One of the most distinctive features of the JavaTM programming language is the ability to specify class loading policies. Despite the popularity of class loaders, little has been done to reduce the cost associated with defining the same class by multiple loaders. In particular, implementations of the Java virtual machine (JVMTM) create a complete runtime representation of each class regardless of how many class loaders already define the same class. This lack of sharing leads to poor memory utilization and to replicated run-time work. Recent efforts achieve some degree of sharing only when dynamic binding behaves predictably across loaders. This limits sharing to class loaders whose behavior is fully controlled by the JVM. As a result applications that implement their own class loading policies cannot enjoy the benefit of sharing.
We present a novel technique for sharing the runtime representation of classes (including bytecodes and, under some conditions, compiled code) across arbitrary user-defined class loaders. We describe how our approach is applied to the multi-tasking virtual machine (MVM). The new multi-tasking virtual machine retains the fast start-up time of the original MVM while extending the scope of footprint savings to applications that exploit user-defined class loaders.
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Arnold, J.: Shared Libraries on UNIX System V. In: Summer USENIX Conference, Atlanta, GA (1986)
Balfanz, D., Gong, L.: Experience with Secure Multi- Processing in Java. Technical Report 560-97, Department of Computer Science. Princeton University (September 1997)
Czajkowski, G., Daynès, L.: Multitasking without Compromise: A Virtual Machine Evolution. In: ACM OOPSLA 2001, Tampa, FL (october 2001)
Czajkowski, G., Daynès, L., Nystrom, N.: Code Sharing among Virtual Machines. In: Magnusson, B. (ed.) ECOOP 2002. LNCS, vol. 2374. Springer, Heidelberg (2002)
Czajkowski, G., Daynès, L., Titzer, B.: A multi-user virtual machine. In: USENIX, San Antonio, TX (2003)
Dillenberger, D., Bordawekar, R., Clark, C.W., Durand, D., Emmes, D., Gohda, O., Howard, S., Oliver, M.F., Samuel, F., John, R.W.S.: Building a JavaTM Virtual Machine for Server Applications: The JVM on OS/390. IBM Systems Journal 39(1) (2000)
Free Software Foundation (FSF). GCJ: The GNU Compiler for Java (2003)
Gosling, J., Joy, B., Steele, G., Bracha, G.: The JavaTM Language Specification, 2nd edn., September 2000. The JavaTM Series. Addison Wesley, Reading (2000)
Java Community Process. JSR 121: Application Isolation API (2003)
Joisha, P.G., Midkiff, S.P., Serrano, M.J., Gupta, M.: A framework for efficient reuse of binary code in java. In: International Conference on Supercomputing, pp. 440–453 (2001)
Liang, S., Bracha, G.: Dynamic Class Loading in the Java Virtual Machine. In: ACM OOPSLA 1998 (october 1998)
Microsoft Corp. Programming with Application Domains and Assemblies (2005), http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconprogrammingwithapplicationdomainsassemblies.asp
Serrano, M.J., Bordawekar, R., Midkiff, S.P., Gupta, M.: Quicksilver: a Quasi-Static Compiler for Java. In: ACM OOPSLA 2000 (october 2000)
Sun Microsystems Inc. The Java HotSpot Performance Engine Architecture (1999), http://java.sun.com/products/hotspot/whitepaper.html
Sun Microsystems Inc. Class Data Sharing (2004), http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html
US Department of Commerce. Secure hash standard (April 1995)
Wong, B., Czajkowski, G., Daynès, L.: Dynamically loaded classes as shared libraries. In: Proceedings of IEEE International Parallel and Distributed Processing Symposium (IPDPS), Nice, France (2003)
Yu, D., Shao, Z., Trifonov, V.: Supporting binary compatibility with static compilation. In: 2nd Java Virtual Machine Research and Technology Symposium (JVM 2002), pp. 165–180 (2002)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2005 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Daynès, L., Czajkowski, G. (2005). Sharing the Runtime Representation of Classes Across Class Loaders. In: Black, A.P. (eds) ECOOP 2005 - Object-Oriented Programming. ECOOP 2005. Lecture Notes in Computer Science, vol 3586. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11531142_5
Download citation
DOI: https://doi.org/10.1007/11531142_5
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-27992-1
Online ISBN: 978-3-540-31725-8
eBook Packages: Computer ScienceComputer Science (R0)