J# Execution Model

wrackbaaΚινητά – Ασύρματες Τεχνολογίες

10 Δεκ 2013 (πριν από 3 χρόνια και 7 μήνες)

97 εμφανίσεις



Lecture 4:


J# Execution Model

2

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# in Visual Studio .NET

4
-
3



Part 1


.NET execution model…

4

Microsoft

Introducing CS using .NET

J# in Visual Studio .NET

4
-
4



Example


Recall the Banking App we built…

transactions.txt

customers.txt

Banking App

5

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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 =
C
ommon
I
ntermediate
L
anguage


a portable, generic assembly language…

11

Microsoft

Introducing CS using .NET

J# 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


Operating System

BankingApp.exe process





CLR

FxCL

JIT Compiler

object code

BankingApp code

12

Microsoft

Introducing CS using .NET

J# in Visual Studio .NET

4
-
12



Part 2


J# execution model…

13

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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 =
D
ynamic
L
ink
L
ibrary

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

Microsoft

Introducing CS using .NET

J# 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
:

G
lobal
A
ssembly
C
ache

(a Windows OS directory)

2.
AppBase
:

directory containing .EXE file


17

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

<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


19

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# in Visual Studio .NET

4
-
20



.DLL dependencies stored in .EXE


.EXE contains a list of dependencies, as well as code…

21

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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:

Library

Class Name

Size Method

JCL

java.util.ArrayList

size()

FxCL

System.Collections.ArrayList

get_Count()

24

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# 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

Microsoft

Introducing CS using .NET

J# in Visual Studio .NET

4
-
27



What's next?


Lab #2…