www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA NATIVE METOTLAR

Last update: 10/3/2014 6:28:00 PM

Yazan:Fatih KABAKCI

Bir java programı içerisinde java harici bir programlama dilinde yazılmış bir program çağırılabilmektedir.Bazı durumlarda üzerinde çalıştığınız işletim sistemi ve CPU için performans açısından native kod mekanizmasına ihtiyaç duyulabilir.Bu sayede farklı bir segmentten gelen kod ile daha hızlı koşulabilecek bir program oluşturabilir.Genel olarak java programlama dili içerisinden çağrılan alt rutin programlar C ile yazılmaktadır.

C++ programlama dilindeki extern anahtar sözcüğü ile paralel bir görevde bulunan Java programlama dilinde native anahtar sözcüğü bu görevi yansıtmaktadır.C programlama dilindeki bir programı Java ile bütünleştirme işlemine Java Native Interface adı verilir.

Aşağıda tam sayı tipinde bir üyesi olan NativeApp sınıfı verilmektedir.Senaryo gereği bu sınıfın bir native metodu bulunmaktadır.Bu metod C dili ile yazılacaktır ve java içerisinden çağrılarak NativeApp sınıfının üyesi olan tam sayı değişkeninin değerini dışarıdan değiştirecektir.

Programın .java uzantılı dosyası aşağıdaki gibi verilmiştir.



Programda static bloğu ile yüklenen NativeApp kütüphanesini oluşturmak asıl hedef olacaktır.Bu iş için System sınıfında tanımlı static void loadLibrary(String headerName) kullanılmaktadır.Şimdi ilgili header'i oluşturmak için aşağıdaki adımlar izlenmelidir.
  • Yazılan Java programı javac NativeApp.java komutu ile derlenir.
  • Komut satırından C header'i üretmek için kullanılan javah.exe çalıştırılır.


  • javah -jni NativeApp komutu çalıştırılarak hedef header üretilir.(NativeApp.h)
javah ile oluşturulan NativeApp.h header'inin içeriği aşağıdaki gibi olacaktır.Bu çıktı işletim sistemi ve CPU'ya göre değişebilir.Aşağıdaki çıktı windows 7 işletim sistemi üzerinde oluşturulmuştur.



Yukarıdaki header içerisinde oluşturulan JNIEXPORT void JNICALL Java_NativeApp_change (JNIEnv *, jobject); prototipli fonksiyon esasen bizim java içerisinden çağırmak istediğimiz change() metodudur.Hatırlanacağı üzere C programlama dilinde bir fonksiyon kullanılmadan önce header'i içerisinde prototipi ile tanımlanmak zorundadır.Bu yüzden işletim sistemi otomatik olarak bunu header içerisinde tanımlamıştır.Java_NativeApp ön eki ile bu metodun Java tarafından NativeApp sınıfı ile geldiğini belirtir.Aşağıdaki C programı ise bu ön ek ile tanımlanacak bir C fonksiyonu olacaktır.

Aşağıdaki C programı ile de data değişkeninin değeri değiştirilecektir.Bu C programıda Java içerisinden çağrılarak native mekanizması yerine getirilmiş olacaktır.



Oluşturulan C programından sonra son olarak dll oluşturmak adımı kalmaktadır.Bunun için ise komut satırından cl/ld NativeApp.c girilmesi gerekmektedir.Bunun için C/C++ derleyicileri kullanılmalıdır.NativeApp.dll oluştuktan sonra NativeApp.class java dosyası java NativeApp komut satırı ile çalıştırıldığı anda beklenen çıktı oluşacaktır.
data is being changed by C
data was changed by C
After calling native change():2

Dezavantajlar

Native metotlar Javanın taşınabilirlik ilkesini desteklemez.Çünkü koşulan alt rutin bir java programı değildir programıdır.Ayrıca bu bir güvenlik riskide oluşturabilir.Sonuç olarak çalıştırılan yedek program Java Virtual Machine(Java Sanal Makinesi) kapsama alanında yazılmamıştır.Dolayısıyla çalıştırılan kod esasen bir makine kodudur ve çalıştığı CPU ve işletim sistemine bağlı oluşturulur.Bu da portatip bir kod olmaktan çıkacaktır.Ayrıca JVM kapsama alanında yazılmadığı içinde çalışan bilgisayarın değişik kısımlarına erişerek kötü niyetli programcılar için virüs bulaştırma riski fazladır.
MemberCommentDate:
guest
teşekkürler

yasin

2/21/2019 9:35:00 AM
guest
Gördüğüm Türkçe kaynaklar arasında en açıklayıcısı bu diyebilirim.Emeğiniz için teşekkürler.

Kazım ÇATALKAYA
coupons for prescriptions techmyview.com prescription coupon card
detrola myhsbook.com detrol la
abilify cogentin go abilify
what is a ldn injection to stop drinking implant for opiate addiction
12/9/2015 11:06:00 AM

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Spring Boot, Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.