
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-compact1dizininde compact 1 tipli JRE oluştururejre-compact2dizininde compact 2 tipli JRE oluştururejre-compact3dizininde compact 3 tipli JRE oluştururejre-fulldizininde 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-javafxdizinindecompact1profilliJavaFXiçeren JRE oluşturur.ejdk-compact2-javafxdizinindecompact2profilliJavaFXiçeren JRE oluşturur.ejdk-compact3-javafxdizinindecompact3profilliJavaFXiç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-nashorndizinindecompact1profilliNashorniçeren JRE oluşturur.ejdk-compact2-nashorndizinindecompact2profilliNashorniçeren JRE oluşturur.ejdk-compact3-nashorndizinindecompact3profilliNashorniç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