270 likes | 453 Views
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... ”
E N D
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
Part 1 • .NET execution model…
transactions.txt Banking App customers.txt Example • Recall the Banking App we built…
Visual Studio .NET BankingApp.exe BankingApp.exe • Visual Studio .NET produces .EXE: App.jsl Customer.jsl CustomersIO.jsl Transactions.jsl
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 FrameworkClass Library (FxCL) Common Language Runtime (CLR) Operating System Hardware
.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.exe process BankingApp code CLR FxCL Operating System Hardware
Why do this? • As noted in Lecture 1, two reasons: • safer execution • 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
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…
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…
JIT Compiler 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.exe process BankingApp code CLR FxCL object code Operating System Hardware
Part 2 • J# execution model…
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?
(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.exe process BankingApp code CLR FxCL JCL
(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 • … FxCL vjscor.dll vjslib.dll VJSSupUILib.dll . . .
(3) How is the JCL found? • Java searches along a CLASSPATH (list) of directories • J# searches exactly 2 places, in this order: • GAC: Global Assembly Cache (a Windows OS directory) • AppBase: directory containing .EXE file
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
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 <DIR> GAC 04/20/2004 <DIR> NativeImages1_v1.0.3705 04/20/2004 <DIR> NativeImages1_v1.1.4322 04/20/2004 <DIR> 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 8,704 vjscor.dll
One last piece of the puzzle... • When you run .EXE file… • … how does CLR know exactly which DLLs to load? ? BankingApp.exe process BankingApp code FxCL vjscor.dll vjslib.dll CLR VJSSupUILib.dll
.DLL dependencies stored in .EXE • .EXE contains a list of dependencies, as well as code…
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 youautomatically by VS .NET • additional references are addedvia Project menu, Add Reference…
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 .NET2003 Command Prompt C:\BankingApp\bin\Debug> ildasm BankingApp.exe
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:
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
ILDasm to see ArrayList size() (cont'd) • Select java.util • Drill down to locate java.util.ArrayList • Note how the size()method is implemented
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
What's next? • Lab #2…