Java 8 Embedded – Gömülü cihazlarda Java nasıl kullanılır?
Java 8 Embedded, Java çalışma ortamını (JRE), sınırlı bellek imkanlarına sahip gömülü cihazlarda, az bellek tüketimli olarak sunmayı amaçlayan düşüncenin ürünüdür.
Java çalışma ortamı, farklı işlemci ailesi ve farklı işletim sistemi ailelerine göre ayrıca hazırlandığı için platform bağımsızlığını sunmaktadır. Örneğin bugün x86
mimarili bir işlemci için Windows
, Mac
ve Linux
türevi işletim sistemlerinde hem çalışma ortamını hem geliştirme ortamını kullanabiliyoruz. Ha keza, ARM 6/7
işlemci ailesine sahip makinelerde Java çalışma (JRE) ve geliştirme ortamını (JDK) kullanabiliyoruz.
Gömülü sistemlerde ARM
mimarili işlemciler çok fazla tercih ediliyor. Örneğin elinizdeki akıllı telefonun ARM
ailesinden bir işlemci olma olasılığı çok çok yüksek. Popülerliği oldukça yüksek olan bir gömülü cihaz Raspberry PI’ de ARM
ailesinden bir işlemci kullanıyor.
Gömülü cihazların kendine has sınırlılıkları bulunuyor. Bu sınırlılıkların en başında ise bellek sınırlılığı geliyor. ARM işlemci ailesine göre yapılandırılmış full bir JRE, disk ortamında yaklaşık olarak 47 mb yer tutuyor. 47 MB göze çok gözükmeyebilir, ama, örneğin 64 MB bir belleğe sahip gömülü cihaz için 47 MB çok fazla! İşte tam da bu noktada Java 8 Embedded devreye giriyor.
Java 8 Embedded, Java çalışma ortamını (JRE), gömülü cihazlar için kısmi modülerlik ile boyut olarak düşürmeyi amaçlamaktadır. Bu amaçla Java 8 Embedded geliştirim ihtiyaçlarına göre 3 tip JRE profili sunmaktadır. Bir de full profili katarsak toplamda 4 profil var.
Java 8 Embedded, compact 1
, compact 2
ve compact 3
profillerini sunmaktadır. Bu profillerde, en çok ihtiyaç duyulabilecek spesifik Java paketleri gruplandırılarak boyut bakımından küçülme sağlanmaktadır.
Buna ilaveten, standart bir JRE için iki JVM modu bulunmaktadır. Bunlar client
ve server
mode dur. Bu iki seçenekte çalışma ortamına göre JIT Compiler bazında ayrıştırma yapılmaktadır. Java 8 Embedded için ise varsayılan olarak client
ve server
modu haricinde minimal
modu gelmektedir. minimal
modda bellek tüketimi minimize edilmektedir. Fakat bu modda azami %5
‘lik bir performans düşümü makul karşılanmaktadır.
Birbirini içerir biçimde yapılandırılan Compact
profiller, sık tercih edileceği düşünülen paketler bazında gruplandırılmıştır. Bu gruplamayı aşağıdaki şekilden görebilmekteyiz.
Full JRE
⊂ compact-3
⊂ compact-2
⊂ compact-1
Örneğin gömülü sisteminizde en temel Java paketlerini kullanacaksanız compact 1
profilini seçmek size avantaj sağlayacaktır. compact 1
profilinde hazırlanan JRE yaklaşık 9.5 MB’dir. Profiller arası boyutsal kıyaslamaya dair grafiği aşağıda görüyoruz.
Embedded JRE oluşturmak
Yukarıda zikrettiğimiz Compact profiller için harici bir indirme sayfası bulunmuyor. Bir Compact profile sahip JRE oluşturmak için, jrecreate
aracı kullanılmaktadır. jrecreate
aracı ile ihtiyaç duyulan gömülü JRE oluşturulabilmektedir.
jrecreate
aracı Oracle JDK/JRE içinde bulunmamaktadır. Araç, Java SE Embedded sayfasından indirilen ejdk
içinde bulunmaktadır. Bu sayfada işlemci ailelerinde göre gruplanmış ejdk
arşiv dosyaları bulunmaktadır.
Örneğin Raspberry PI için Java 8 Embedded oluşturmak istiyorsak, ilk sıradaki ARM versiyonlu ejdk
‘yı indirebiliriz.
İndirme işleminden sonra ayıklanan arşiv dosyası içinde bin
, lib
, doc
ve linux_arm_vfp_hflt
dizinleri bulunmaktadır. jrecreate
aracı ise /bin
dizini altında bulunmaktadır.
Şimdi ilgili /bin dizine terminalden geçelim ve jrecreate ile compact profile sahibi Embedded JRE çıktılarımızı üretelim.
> jrecreate -p compact1 --dest ejre-compact1 (1)
> jrecreate -p compact2 --dest ejre-compact2 (2)
> jrecreate -p compact3 --dest ejre-compact3 (3)
> jrecreate --dest ejre-full (4)
ejre-compact1
dizininde compact 1 tipli JRE oluştururejre-compact2
dizininde compact 2 tipli JRE oluştururejre-compact3
dizininde compact 3 tipli JRE oluştururejre-full
dizininde full JRE oluşturur
Yukarıdaki 4 komut satırı işleminden istediğimizi işletebiliriz. Bunların hepsini işlettiğimizde, /bin
dizininde dizinler halinde oluşturulan Embedded JRE çıktılarını göreceğiz.
Bu çıktılara göre ihtiyacımız olan profildeki Java çalışma ortamını, gömülü cihazımızda kullanmaya başlayabiliriz.
Embedded JRE Extensions
Compact profil şeklinde oluşturulan embdedded JRE içlerinde, JavaFX, Nashorn gibi teknolojiler bulunmamaktadır. Fakat bu teknolojiler, jcreate ile opsiyonel olarak üretime dahil edilebilmektedir.
JavaFX Extension
JavaFX eklentisi kullanıldığında, gömülü cihazınızda JavaFX kullanmak için gerekli paketler Embedded JRE içine dahil edilmektedir. Elbette, oluşan çıktıların boyutları artmaktadır (Yaklaşık 10M kadar daha).
> jrecreate -p compact1 -x fx:controls --dest ejdk-compact1-javafx (1)
> jrecreate -p compact2 -x fx:controls --dest ejdk-compact2-javafx (2)
> jrecreate -p compact3 -x fx:controls --dest ejdk-compact3-javafx (3)
ejdk-compact1-javafx
dizinindecompact1
profilliJavaFX
içeren JRE oluşturur.ejdk-compact2-javafx
dizinindecompact2
profilliJavaFX
içeren JRE oluşturur.ejdk-compact3-javafx
dizinindecompact3
profilliJavaFX
içeren JRE oluşturur.
Nashorn Extension
Java 8 ile birlikte gelen Nashorn JavaScript motoru, bir eklenti olarak ürettiğiniz ejre
içine dahil edilebilmektedir. Bu sayee JVM içinde JavaScript dilinde yazılan uygulamaları çalıştırma imkanı elde edilmektedir. Nashorn eklentisi ejre
çıktısına yaklaşık 1MB
ilave etmektedir.
> jrecreate -p compact1 -x nashorn --dest ejdk-compact1-nashorn (1)
> jrecreate -p compact2 -x nashorn --dest ejdk-compact2-nashorn (2)
> jrecreate -p compact3 -x nashorn --dest ejdk-compact3-nashorn (3)
ejdk-compact1-nashorn
dizinindecompact1
profilliNashorn
içeren JRE oluşturur.ejdk-compact2-nashorn
dizinindecompact2
profilliNashorn
içeren JRE oluşturur.ejdk-compact3-nashorn
dizinindecompact3
profilliNashorn
içeren JRE oluşturur.
Not
|
-x parametresiyle JavaFX eklentisi belirtildiğinde, JavaFX üretilen JRE içine dahil edilmektedir. -x parametresi fx:controls , sunec , sunpkcs11 , locales , charsets , nashorn değerlerini kabul etmektedir. Birden fazlasını aynı anda kullanmak için (, ) kullanılabilmektedir. |
Java 8 ME vs Java 8 Embedded
Java Me ile Java Embedded’in birbirine karıştırılması oldukça olası. Java ME, gömülü cihazlarda Java sanal makinesinin (JVM) çok çok küçük bellek tüketerek çalışmasına olanak sağlayan özel bir Java çalışma ortamıdır. Java 8 Me ile gömülü cihazların donanımsal birimlerini kontrol etmek mümkündür. Örneğin bir gömülü cihazın giriş/çıkış pinlerini, Watchdog Timer gibi bileşenlerini kullanabilirsiniz. Java ME içinde bunları kullanabilmek için özel paket ve sınıflar yer almaktadır.
Java 8 Ebook bakmayı unutmayın. Tekrar görüşmek dileğiyle.
Tag:backend
1 Comment
Merhaba Rahman Bey,
Gerçekten çok faydalı bir yazı olmuş. Teşekkürler..
Linux işletim sistemi kullananlar için eklenmesi gereken bir kaç şey var.
bin dizini altında bulunan jrecreate.sh scriptini çalıştıradan önce
PC’deki java-jdk dizinin pathini JAVA_HOME isimli değişkene atamak gerekiyor.
$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386
$ jrecreate.sh –profile compact1 –dest compact1-minimal –vm minimal
Kaynak : http://fuyichin.blogspot.com/2015/06/how-to-create-embedded-java-8.html