Contents - Cultural View
Contents - Cultural View Contents - Cultural View
Java Virtual Machine 302 Secure execution of remote code A virtual machine architecture allows very fine-grained control over the actions that code within the machine is permitted to take. This is designed to allow safe execution of untrusted code from remote sources, a model used by Java applets. Applets run within a VM incorporated into a user's browser, executing code downloaded from a remote HTTP server. The remote code runs in a restricted "sandbox", which is designed to protect the user from misbehaving or malicious code. Publishers can purchase a certificate with which to digitally sign applets as "safe", giving them permission to ask the user to break out of the sandbox and access the local file system, clipboard or network. C to bytecode compilers From the point of view of a compiler, the Java Virtual Machine is just another processor with an instruction set, Java bytecode, for which code can be generated. The JVM was originally designed to execute programs written in the Java language. However, the JVM provides an execution environment in the form of a bytecode instruction set and a runtime system that is general enough that it can be used as the target for compilers of other languages. Because of its close association with the Java language, the JVM performs the strict runtime checks mandated by the Java specification. That requires C to bytecode compilers to provide their own "lax machine abstraction", for instance producing compiled code that uses a Java array to represent main memory (so pointers can be compiled to integers), and linking the C library to a centralized Java class that emulates system calls. Most or all of the compilers listed below use a similar approach. Several C to bytecode compilers exist: • NestedVM [7] translates C to MIPS machine language first before converting to Java bytecode. • Cybil [8] works similarly to NestedVM but targets J2ME devices. • LLJVM [9] compiles C to LLVM IR, which is then translated to JVM bytecode. • C2J [10] is also GCC-based, but it produces intermediary Java source code before generating bytecode [11] . Supports the full ANSI C runtime. • Axiomatic Multi-Platform C [12] supports full ANSI C 1989, SWT, and J2ME CDC 1.1 for mobile devices. • Java Backend for GCC [13] , possibly the oldest project of its kind, was developed at The University of Queensland in 1999. • Javum [14] is an attempt to port the full GNU environment to the JVM, and includes one of the above compilers packaged with additional utilities. • egcs-jvm [15] appears to be an inactive project. Compilers targeting Java bytecode have been written for other programming languages, including Ada and COBOL. Licensing Starting with J2SE 5.0, changes to the JVM specification have been developed under the Java Community Process as JSR 924 [16] . As of 2006, changes to specification to support changes proposed to the class file format (JSR 202 [17] ) are being done as a maintenance release of JSR 924. The specification for the JVM is published in book form, [18] known as "blue book". The preface states: We intend that this specification should sufficiently document the Java Virtual Machine to make possible compatible clean-room implementations. Sun provides tests that verify the proper operation of implementations of the Java Virtual Machine. Sun's JVM is called HotSpot. Clean-room Java implementations include Kaffe, IBM J9 and Dalvik. Sun retains control over the Java trademark, which it uses to certify implementation suites as fully compatible with Sun's specification.
Java Virtual Machine 303 Heap The Java Virtual Machine heap is the area of memory used by the JVM (and specifically HotSpot) for dynamic memory allocation [19] . The heap is split up into "generations": • The young generation stores short-lived objects that are created and immediately garbage collected. • Objects that persist longer are moved to the old generation (also called the tenured generation). [20] [21] • The permanent generation (or permgen) is used for class definitions and associated metadata. There was originally no permanent generation, and objects and classes were just stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allows significant performance improvements [20] . See also • List of Java virtual machines • Comparison of application virtual machines • Automated Exception Handling • Java performance • List of JVM languages References • Clarifications and Amendments to the Java Virtual Machine Specification, Second Edition [22] includes list of changes to be made to support J2SE 5.0 and JSR 45 • JSR 45 [23] – Specifies changes to the class file format to support source-level debugging of languages such as JSP and SQLJ that are translated to Java External links • The Java Virtual Machine Specification [7] • Java implementations [24] at the Open Directory Project • Sun to build virtual machine for iPhone - ComputerWorld [25] • Java Virtual Machine Download Link [26] • JVM implementation in pure Java [27] References [1] http:/ / www. java. com/ en/ about/ Learn about Java Technology [2] 1996, possibly the first new language specifically designed to run on the JVM) [3] Tolksdorf, Robert (2005). "Languages for the Java VM" (http:/ / www. is-research. de/ info/ vmlanguages/ ). . Retrieved 2008-06-08. [4] Nutter, Charles (2007-01-03). "InvokeDynamic: Actually Useful?" (http:/ / headius. blogspot. com/ 2007/ 01/ invokedynamic-actually-useful. html). . Retrieved 2008-01-25. [5] Krill, Paul (2008-01-31). "Sun's Da Vinci Machine broadens JVM coverage" (http:/ / www. infoworld. com/ article/ 08/ 01/ 31/ davinci-machine_1. html). . Retrieved 2008-02-06. [6] "The Verification process" (http:/ / java. sun. com/ docs/ books/ jvms/ second_edition/ html/ ClassFile. doc. html#9766). The Java Virtual Machine Specification. Sun Microsystems. 1999. . Retrieved 2009-05-31. [7] http:/ / nestedvm. ibex. org/ [8] http:/ / cibyl. googlecode. com [9] http:/ / da. vidr. cc/ projects/ lljvm/ [10] http:/ / www. novosoft-us. com/ solutions/ product_c2j. shtml [11] http:/ / tech. novosoft-us. com/ product_c2j_faq. jsp [12] http:/ / objectmix. com/ compilers/ 37664-ampc-version-1-6-2-released-c-java-class-files-compiler. html [13] http:/ / www. itee. uq. edu. au/ ~cristina/ uqbt. html#gcc-jvm [14] http:/ / sourceforge. net/ projects/ javum/
- Page 255 and 256: Plain Old Java Object 251 POJO gene
- Page 257 and 258: Pluggable look and feel 253 Pluggab
- Page 259 and 260: Primitive wrapper class 255 Primiti
- Page 261 and 262: Quark Framework 257 Quark Framework
- Page 263 and 264: Quark Framework 259 has proven to p
- Page 265 and 266: Quark Framework 261 //illustrates p
- Page 267 and 268: Quark Framework 263 As well as LECC
- Page 269 and 270: Quark Framework 265 `catch` (\ex ->
- Page 271 and 272: REPLAY (software) 267 Qualities REP
- Page 273 and 274: Real time Java 269 References [1] J
- Page 275 and 276: Restlet 271 Connectors The list of
- Page 277 and 278: SLAMD 273 SLAMD The SLAMD Distribut
- Page 279 and 280: SLAMD Server 275 SLAMD Server A SLA
- Page 281 and 282: Bruno Souza 277 Bruno Souza Born Na
- Page 283 and 284: Static import 279 References [1] Ja
- Page 285 and 286: strictfp 281 Behaviors and restrict
- Page 287 and 288: Sun Web Developer Pack 283 Sun Web
- Page 289 and 290: Swing (Java) 285 The Swing Architec
- Page 291 and 292: Swing (Java) 287 Relationship to AW
- Page 293 and 294: Swing (Java) 289 } window } See als
- Page 295 and 296: SwingLabs 291 • JDNC [7] : Contai
- Page 297 and 298: Synth Look and Feel 293 Supposing t
- Page 299 and 300: TeachScheme! 295 • a function def
- Page 301 and 302: TeachScheme! 297 TeachScheme! and B
- Page 303 and 304: Unified Expression Language 299 Imp
- Page 305: Java Virtual Machine 301 Bytecode v
- Page 309 and 310: Xerlin 305 • Steinbrenner, Eugen
- Page 311 and 312: XStream 307 } and add some of these
- Page 313 and 314: Article Sources and Contributors 30
- Page 315 and 316: Article Sources and Contributors 31
- Page 317 and 318: Image Sources, Licenses and Contrib
Java Virtual Machine 303<br />
Heap<br />
The Java Virtual Machine heap is the area of memory used by the JVM (and specifically HotSpot) for dynamic<br />
memory allocation [19] . The heap is split up into "generations":<br />
• The young generation stores short-lived objects that are created and immediately garbage collected.<br />
• Objects that persist longer are moved to the old generation (also called the tenured generation).<br />
[20] [21]<br />
• The permanent generation (or permgen) is used for class definitions and associated metadata.<br />
There was originally no permanent generation, and objects and classes were just stored together in the same area.<br />
But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area<br />
allows significant performance improvements [20] .<br />
See also<br />
• List of Java virtual machines<br />
• Comparison of application virtual machines<br />
• Automated Exception Handling<br />
• Java performance<br />
• List of JVM languages<br />
References<br />
• Clarifications and Amendments to the Java Virtual Machine Specification, Second Edition [22] includes list of<br />
changes to be made to support J2SE 5.0 and JSR 45<br />
• JSR 45 [23] – Specifies changes to the class file format to support source-level debugging of languages such as<br />
JSP and SQLJ that are translated to Java<br />
External links<br />
• The Java Virtual Machine Specification [7]<br />
• Java implementations [24] at the Open Directory Project<br />
• Sun to build virtual machine for iPhone - ComputerWorld [25]<br />
• Java Virtual Machine Download Link [26]<br />
• JVM implementation in pure Java [27]<br />
References<br />
[1] http:/ / www. java. com/ en/ about/ Learn about Java Technology<br />
[2] 1996, possibly the first new language specifically designed to run on the JVM)<br />
[3] Tolksdorf, Robert (2005). "Languages for the Java VM" (http:/ / www. is-research. de/ info/ vmlanguages/ ). . Retrieved 2008-06-08.<br />
[4] Nutter, Charles (2007-01-03). "InvokeDynamic: Actually Useful?" (http:/ / headius. blogspot. com/ 2007/ 01/ invokedynamic-actually-useful.<br />
html). . Retrieved 2008-01-25.<br />
[5] Krill, Paul (2008-01-31). "Sun's Da Vinci Machine broadens JVM coverage" (http:/ / www. infoworld. com/ article/ 08/ 01/ 31/<br />
davinci-machine_1. html). . Retrieved 2008-02-06.<br />
[6] "The Verification process" (http:/ / java. sun. com/ docs/ books/ jvms/ second_edition/ html/ ClassFile. doc. html#9766). The Java Virtual<br />
Machine Specification. Sun Microsystems. 1999. . Retrieved 2009-05-31.<br />
[7] http:/ / nestedvm. ibex. org/<br />
[8] http:/ / cibyl. googlecode. com<br />
[9] http:/ / da. vidr. cc/ projects/ lljvm/<br />
[10] http:/ / www. novosoft-us. com/ solutions/ product_c2j. shtml<br />
[11] http:/ / tech. novosoft-us. com/ product_c2j_faq. jsp<br />
[12] http:/ / objectmix. com/ compilers/ 37664-ampc-version-1-6-2-released-c-java-class-files-compiler. html<br />
[13] http:/ / www. itee. uq. edu. au/ ~cristina/ uqbt. html#gcc-jvm<br />
[14] http:/ / sourceforge. net/ projects/ javum/