The Java Native Interface (JNI) Pourquoi ? Comment ? Un exemple

The Java Native Interface (JNI)
The
Java
Native
Interface
(JNI)
Exécuter du code écrit dans un autre langage (C/C
++
)
Exécuter
du
code
écrit
dans
un
autre
langage
(C/C )
Pourquoi ?
Pourquoi
?
Comment ?
Un exemple
Un
exemple
Au coeur de Java 2 : Fonctions avancées”
,
Au
coeur
de
Java
2
:
Fonctions
avancées
,
C.S.Horstmann & G.Cornell, Campus Press, Pearson
Education
,
2002
6-1
F. Mallet – EPU Électronique
,
Pourquoi ?
On dis
p
ose de beaucou
p
de code non
j
ava
ppj
On veut le réutiliser
On ne veut pas le « porter » à la main
Accès à des unités ou fonctions s
y
stèmes
Fastidieux (
java lang System
) ou impossible en java
Fastidieux
(
java
.
lang
.
System
)
ou
impossible
en
java
e.g., Ports série ou parallèle, etc.
id'éi déi
La v
i
tesse
d'
ex
é
cut
i
on est
term
i
nante
On veut écrire des bouts en assembleur/c/c++
Peu plausible avec les performances de JIT et HotSpot
Goulot d'étranglement souvent ailleurs (
eg
E/S réseau)
6-2
F. Mallet – EPU Électronique
Goulot
d'étranglement
souvent
ailleurs
(
e
.
g
.,
E/S
,
réseau)
Mises En Garde
Perte de portabilité
Perte
de
portabilité
Il faut fournir des bibliothèques partagées pour chaque
l
fiidii l'illi
pl
ate-
f
orme a
i
ns
i
que
d
es
i
nstruct
i
ons pour
l'i
nsta
ll
at
i
on
Problèmes de sécurité
Pas de protection par la sandbox java
Il est facile d'écrire du code C/C++ qui corrompt la
machine virtuelle java
C, C++ ou autre
Llii 'i t ll t ibl
L
a
li
a
i
son avec n
'i
mpor
t
e que
l
l
angage es
t
poss
ibl
e
JNI ne supporte que le lien avec C
6-3
F. Mallet – EPU Électronique
Comment ?
Appeler une fonction C/C++ à partir du code java
Appeler
une
fonction
C/C++
à
partir
du
code
java
Écrire le code java et le compiler : mot clé native
Générer un fichier .h : javah
Écrire l
'
implémentation native en C/C++
Écrire
limplémentation
native
en
C/C++
Créer une bibliothèque partagée (e.g., DLL)
Exécuter le programme java qui utilise la bibliothèque
Appeler du code java à partir de C/C++
Appeler
du
code
java
à
partir
de
C/C++
Invoquer la machine virtuelle
Compiler le Java en code natif (e.g., gcj)
6-4
F. Mallet – EPU Électronique
Écrire Le Code Java
Les
méthodes natives
sont précédées du mot clé
native
Les
méthodes
natives
sont
précédées
du
mot
clé
native
La méthode stati
q
ue
l
oadLibrary de la classe
S
ystem
q
Permet le chargement de bibliothèques partagées
St ldLib ("
i
")
S
ys
t
em.
l
oa
dLib
rary
("
e
ssa
i
")
;
Charge essai.dll sous Windows, libessai.so sous Unix
A quel moment utiliser cette instruction ?
Constructeur ? Méthode ?
Constructeur
?
Méthode
?
Les blocs statiques sont des blocs exécutés lorsque la classe à
lllil i
l
ld
l
aque
ll
e
il
s appart
i
ennent est c
h
arg
é
e
p
ar
l
e
Cl
assLoa
d
er.
C'est le seul code en dehors d'une méthode.
6-5
F. Mallet – EPU Électronique
1 / 32 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !