Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 4: J# Execution Model. 2 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-2 Objectives “J# programs execute like any other.NET program.

Similar presentations


Presentation on theme: "Lecture 4: J# Execution Model. 2 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-2 Objectives “J# programs execute like any other.NET program."— Presentation transcript:

1 Lecture 4: J# Execution Model

2 2 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-2 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

3 3 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-3 Part 1.NET execution model…

4 4 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-4 Example Recall the Banking App we built… transactions.txt customers.txt Banking App

5 5 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-5 BankingApp.exe Visual Studio.NET produces.EXE: Visual Studio.NET App.jsl Customer.jsl CustomersIO.jsl Transactions.jsl BankingApp.exe

6 6 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-6 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 Hardware Operating System Common Language Runtime (CLR) BankingApp.exe.NET Framework Class Library (FxCL)

7 7 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-7.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… Hardware Operating System BankingApp.exe process CLR FxCL BankingApp code

8 8 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-8 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

9 9 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-9 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…

10 10 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-10 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…

11 11 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-11 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 Hardware Hardware Operating System Operating System BankingApp.exe process CLR FxCL JIT Compiler object code BankingApp code

12 12 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-12 Part 2 J# execution model…

13 13 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-13 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?

14 14 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-14 (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 CLR BankingApp code FxCL JCL

15 15 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-15 (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......

16 16 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-16 (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

17 17 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-17 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

18 18 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-18 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 GAC 04/20/2004 NativeImages1_v1.0.3705 04/20/2004 NativeImages1_v1.1.4322 04/20/2004 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/20048,704vjscor.dll

19 19 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-19 One last piece of the puzzle... When you run.EXE file… … how does CLR know exactly which DLLs to load? BankingApp.exe process CLR BankingApp code FxCL vjscor.dll vjslib.dll VJSSupUILib.dll ?

20 20 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-20.DLL dependencies stored in.EXE.EXE contains a list of dependencies, as well as code…

21 21 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-21 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…

22 22 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-22 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> ildasm BankingApp.exe

23 23 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-23 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: LibraryClass NameSize Method JCLjava.util.ArrayListsize() FxCLSystem.Collections.ArrayListget_Count()

24 24 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-24 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

25 25 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-25 ILDasm to see ArrayList size() (cont'd) Select java.util Drill down to locate java.util.ArrayList Note how the size() method is implemented

26 26 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-26 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

27 27 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-27 What's next? Lab #2…


Download ppt "Lecture 4: J# Execution Model. 2 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET 4-2 Objectives “J# programs execute like any other.NET program."

Similar presentations


Ads by Google