3. J# Execution Model - University of Illinois at Chicago

Download Report

Transcript 3. J# Execution Model - University of Illinois at Chicago

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