Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture 4: J# Execution Model Objectives “J# programs execute like any other .NET program --- based on a run-time execution engine and an extensive software library. The details of how this works is quite interesting, and exemplifies how program execution has evolved... ” • .NET execution model • J# execution model Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-2 2 Part 1 • .NET execution model… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-3 3 Example • Recall the Banking App we built… transactions.txt customers.txt Introducing Microsoft J# in Visual Studio CS using .NET .NET Banking App 4-4 4 BankingApp.exe • Visual Studio .NET produces .EXE: App.jsl Customer.jsl CustomersIO.jsl Transactions.jsl Visual Studio .NET BankingApp.exe Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-5 5 How does .EXE execute? • Since you can double-click on .EXE, you might be mislead… • Recall the .NET architecture: – run-time environment + large software library BankingApp.exe .NET Framework Class Library (FxCL) Common Language Runtime (CLR) Operating System Hardware Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-6 6 .NET execution model • When you run .EXE, a process is created & a small main() run – main() loads CLR into process & starts CLR running – CLR then loads our .NET code & begins execution… BankingApp code FxCL CLR BankingApp.exe process Operating System Hardware Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-7 7 Why do this? • As noted in Lecture 1, two reasons: 1. safer execution 2. portable execution • Safer? – because CLR can prevent BankingApp from doing things it doesn't have permission to do • Portable? – because BankingApp code can run anywhere CLR exists Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-8 8 Are .NET programs really portable? • Yes! • Implementations exist on: – FreeBSD (i.e. the OS underneath Mac OS X) – Linux (Mono project) – Unix (dotGNU project) • Unfortunately, support for J# is lagging, mostly C# and VB at the moment… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-9 9 What do compiled .NET programs look like? • Java programs are compiled into bytecodes for portability • .NET programs are compiled into CIL for portability – CIL = Common Intermediate Language – a portable, generic assembly language… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-10 10 How does CLR execute CIL? • CIL cannot be directly executed on the hardware • CIL is translated at run-time into hardware's object code – this is know as Just-In-Time ("JIT") compilation BankingApp code FxCL JIT Compiler CLR object code BankingApp.exe process Operating System Hardware Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-11 11 Part 2 • J# execution model… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-12 12 Where's the Java Class Library? • J# enables the best of both worlds: – you can use Java to program the .NET platform (i.e. FxCL) – you can use Java to program the Java platform (i.e. JCL) • So far, we've only shown the FxCL: – where is the Java Class Library? – how is it represented? – how is it found? Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-13 13 (1) Where is the JCL? • The JCL is considered part of the .NET Framework Class Library – in other words, it has been rewritten by Microsoft for .NET – compatible with Sun's JCL, but not a complete implementation: • most of v1.1, some of v1.2 • full support for portion of JCL required by AP CS BankingApp code CLR JCL FxCL BankingApp.exe process Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-14 14 (2) How is the JCL represented? • Java uses .class & .jar files • The .NET Framework Class Library is a set of .DLLs – DLL = Dynamic Link Library file – DLL = compiled code in library form, loaded & linked at run-time – 1 DLL typically contains multiple classes – Windows OS itself is built from 100's of DLLs • The JCL is a subset of the FxCL .DLLs: – vjscor.dll – vjslib.dll – VJSSupUILib.dll – … vjscor.dll vjslib.dll VJSSupUILib.dll .. . FxCL Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-15 15 (3) How is the JCL found? • Java searches along a CLASSPATH (list) of directories • J# searches exactly 2 places, in this order: 1. GAC: Global Assembly Cache (a Windows OS directory) 2. AppBase: directory containing .EXE file Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-16 16 The GAC • The GAC is a global repository of .NET DLLs – .NET DLLs are known as "assemblies", hence the term assembly cache • GAC is a protected Windows OS directory – created when .NET is installed – any user can read from cache – requires administrative rights to modify • Location? – Windows XP: C:\Windows\Assembly – Windows 2000: C:\WinNT\Assembly Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-17 17 Views of the GAC • Explorer shows you conceptual view • For actual representation, open command prompt & cd to it: C:\> cd Windows C:\Windows\> cd Assembly C:\Windows\Assembly> dir 04/20/2004 04/20/2004 04/20/2004 04/20/2004 <DIR> <DIR> <DIR> <DIR> GAC NativeImages1_v1.0.3705 NativeImages1_v1.1.4322 temp C:\Windows\Assembly> cd GAC C:\Windows\Assembly\GAC> cd vjscor C:\Windows\Assembly\GAC\vjscor> cd 1.0.5* C:\Windows\Assembly\GAC\vjscor\1.0.5…> dir 04/20/2004 Introducing Microsoft J# in Visual Studio CS using .NET .NET 8,704 vjscor.dll 4-18 18 One last piece of the puzzle... • When you run .EXE file… • … how does CLR know exactly which DLLs to load? ? BankingApp code vjscor.dll vjslib.dll CLR VJSSupUILib.dll FxCL BankingApp.exe process Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-19 19 .DLL dependencies stored in .EXE • .EXE contains a list of dependencies, as well as code… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-20 20 How did dependencies end up in .EXE? • Visual Studio .NET! • Visual Studio compiles dependency information into .EXE – based on list of references maintained in project file… • Every .DLL must be explicitly referenced – common references set for you automatically by VS .NET – additional references are added via Project menu, Add Reference… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-21 21 ILDasm • ILDasm = "IL Disassembler" • ILDasm allows you to reverse engineer .EXE / .DLL – to see manifest, CIL, etc. • ILDasm is a command-line tool – installed as part of Visual Studio .NET – to run, use Visual Studio .NET 2003 Command Prompt C:\BankingApp\bin\Debug> Introducing Microsoft J# in Visual Studio CS using .NET .NET ildasm BankingApp.exe 4-22 22 Overlap between JCL and FxCL • There is some overlap between Java Class Library and the .NET Framework Class Library, which can cause confusion. • Consider the different implementations of ArrayList, each with its own method for finding the size: Library Class Name Size Method JCL java.util.ArrayList size() FxCL System.Collections.ArrayList get_Count() Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-23 23 ILDasm to see ArrayList size() • For instance see the String methods using Intellisense. Both the JCL equals() and the FxCL Equals() are shown. • Consider the implementation of ArrayList size() – Open a Visual Studio Command Prompt (Start / Visual Studio / Tools / Command Prompt) – Navigate to the GAC: C:/Windows / Assembly / GAC – Enter the vjslib directory, then into the version directory cd vjslib cd 1.0.5* – Look at the contents of vjslib.dll using ILDasm: ildasm vjslib.dll Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-24 24 ILDasm to see ArrayList size() (cont'd) • Select java.util • Drill down to locate java.util.ArrayList • Note how the size() method is implemented Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-25 25 Summary • J# is Java on the .NET platform – full support for .NET Framework Class Library – partial support for Java Class Library • J# has a different execution model than Java – Java uses JVM, searches for .class/.jar files along CLASSPATH – J# uses CLR, searches for .DLL files in GAC & AppBase Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-26 26 What's next? • Lab #2… Introducing Microsoft J# in Visual Studio CS using .NET .NET 4-27 27