How Java works JIT, Just In Time Compiler ● The java compiler takes a .java file and generates a .class file ● JVM ultimately translates bytecode into native code, each time ➤ The .class file contains Java bytecodes, the assembler the same bytecodes are processed, the translation into native language for Java programs code must be made ➤ Bytecodes are executed in a JVM (java virtual machine), ➤ If we can cache translated code we can avoid re-translating the valid bytecodes are specified by Sun the same bytecode sequence • What if third parties create platform/OS specific codes? ➤ Why not just translate the entire .java program into native code? ● The JVM interprets the bytecodes ➤ JVM is platform/OS specific, must ultimately run the code ● Still need the JVM, the JIT works in conjunction with the JVM, not in place of it ➤ Different JVMs will have different performance, JITs are part of the overall JDK/Java performance ● How are classes loaded into the JVM? Can this be thwarted? Duke CPS 108 14.1 Duke CPS 108 14.2 Loading .class files The ClassLoader ● The bytecode verifier “proves theorems” about the bytecodes ● The “Primordial” loader is built-in to the JVM being loaded into the JVM ➤ Sometimes called the “default” loader, but it’s not ➤ These bytecodes may come from a non-Java source, e.g., extensible or customizable the way other loaders are compile Ada into bytecodes (why?) ➤ Loads classes from the platform on which the JVM runs ● This verification is a static analysis of properties such as: (what are loader and JVM written in?) ➤ .class file format (including magic number 0xCAFEBABE) ➤ Methods/instances used properly, parameters correct ● Applet class loader, RMI class loader, user loaders ➤ Stack doesn’t underflow/overflow ➤ Load .class files from URLs, from other areas of platform ➤ … on which JVM runs ● Verification is done by the JVM, not changeable as is, for ➤ What’s the order of sources consulted for loading, does example, the ClassLoader this make a difference? ● Why implement a custom loader? http://securingjava.com ➤ Work at Duke with JOIE http://java.sun.com/sfaq/verifier.html Duke CPS 108 14.3 Duke CPS 108 14.4 The Java ClassLoader Security Manager ● Applets use a SecurityManager ➤ Query for permissions ➤ Supported by browsers by convention (would you use an “untrusted” browser) ● The picture shows JDK 1.0 model, “sandbox” restrictions supported by SecurityManager ➤ Untrusted code restricted to the sandbox ➤ All downloaded/applets are untrusted ➤ Severely limits what a downloaded program can do Duke CPS 108 14.5 Duke CPS 108 14.6 SecurityManager changes in JDK 1.1 SecurityManager changes in JDK 1.2 ● Applets support signing using ● Policies are now supported digital signatures ➤ Allow more fine-grained ➤ Signature stored with code control of access, in JAR file that’s permission downloaded ➤ Based on location (URL) ➤ Clients support open/full and/or digital signatures access to “trusted” applets, ➤ Uses public/private key, some signatures ok applets don’t need to be ● Still “all-or-nothing”, an applet signed, can be from a is untrusted or completely trusted location trusted ● Set policies on a systemwide ➤ What might be preferable? basis using policytool ➤ What about user-level permissions? Duke CPS 108 14.7 Duke CPS 108 14.8.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages2 Page
-
File Size-