Dari pengalaman sedikit dengan Java di embedded, menurut saya java ini
rada "maksa" di embedded.
Pertama dalam hal masalah dasar bahasa:
Misalnya pernah pengalaman bikin app kecil dengan javacard, ada bagian
di mana harus mengirim byte-byte tertentu yang nilainya sebagian di
atas 127. Kira2 kalau di C begini
unsigned char data[] = {255, 255, 0, 12};
Di java tidak ada tipe unsigned, ada "byte" tapi ini tidak akan jalan
byte[] data = new byte[]{255, 255, 0, 12};
Warning adalah error di java:
possible loss of precision
found : int
required: byte
Jadi harus begini
byte[] data = new byte[]{(byte)255, (byte)255, 0, 12};
Perhatikan casting yang berlebihan, itu cuma 2 elemen yg perlu
dicasting, kalo ada 50 elemen (konstanta dalam protokol), lumayan
terlihat aneh.
Mungkin yang biasa C akan terpikir, kenapa nggak memakai string
literal, seperti ini "\xff\xff\x00\x0b"? lalu memakai "getBytes()"?
Nggak bisa, karena Java memakai representasi Unicode, (di tambah lagi
ini: pembuatan string memakan memori extra).
Lalu kalau mau ngeprint array itu untuk debugging:
System.out.println(data[0])
Keluarnya "-1", supaya keluar jadi 255, harus pakai trik lagi:
System.out.println(data[0] & 0xff)
Nah sekarang keluarnya 255.
Itu membawa ke topik berikutnya: bit manipulation. Karena tidak adanya
tipe unsigned, manipulasi bit jadi mengesalkan di Java (saya pernah
cukup ekstensif bermain bit manipulation di Java).
Nah siapa di embedded system yang tidak memakai bit manipulation dan
memanipulasi array data seperti itu?
Kedua adalah masalah eksekusinya:
Sekarang ini (dari dulu bahkan) sudah ada prosessor yang bisa
mengeksekusi kode Java
https://en.wikipedia.org/wiki/Jazelle
Jazelle DBX (Direct Bytecode eXecution) allows some ARM processors to
execute Java bytecode in hardware as a third execution state alongside
the existing ARM and Thumb modes. Jazelle functionality was specified
in the ARMv5TEJ architecture.
Sayangnya meski fitur ini ada, tidak terbuka dokumentasinya, jadi
tidak terpakai optimal (terutama di JDK/JRE open source).
Dan meskipun fitur eksekusi bytecodenya ada, masih ada masalah lain:
managemen memori. Masalah garbage collection biasanya masih harus
ditangani oleh software. Jadi eksekusi Java tidak bisa 100% software
based.
Sebenarnya bisa aja make java untuk embedded, dan dalam kasus tertentu
mungkin bagus, tapi menurut saya sih kayanya java ini nggak akan
menguasai dunia embedded dengan JVM-nya. Lagi pula sudah pasti
biayanya juga gak akan lebih murah kalau harus bayar lisensi ke
Oracle. Btw perhatikan link yg pertama di thread ini ada tulisan:
"according to two recent Oracle-commissioned white papers" (jadi bukan
paper yg tanpa bias).
--
Regards
Yohanes
http://yohan.es/
2012/11/23 Sugeng Widodo <
sugeng...@gmail.com>