ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)

2007-01-14

Java Kernel

หลายคนคงเคยบ่นว่า ทำไมตัว Java Runtime มันใหญ่จัง
น่าจะเล็ก ๆ กว่านี้หน่อย แล้วจะใช้อะไรเพิ่มก็ค่อยให้มันไปดาวน์โหลดเอาเอง (คิดแบบยุค always on)

บัดนี้ความฝันกำลังจะเป็นจริงแล้ว ด้วยโครงการ Java Kernel (หรือชื่อเดิม “Java Browser Edition”)
ซึ่งถ้าทำสำเร็จเนี่ย (เป้าหมายคือ Java 7) เราอาจจะเห็น Java Kernel ขนาด 3 MB ก็เป็นได้

อย่างไรก็ตาม ก็ยังมีคนคิดว่ามันไม่ช่วยเท่าไหร่หรอก

คุณ Chanwit ทดลองลดขนาด rt.jar ดู เอาแค่ให้รันโปรแกรม “Hello World” ได้
โดยใช้ java -verbose + โปรแกรม 7z ช่วย — จาก 36 MB เหลือ 1.8 MB น่าสนใจ

[ลิงก์ "Java Browser Edition": New name, first steps | ผ่าน CK's Blog]

technorati tags: ,

13 comments:

bpitk said...

ผมสงสัยน่ะครับ
คือ ลองแวะไปดู แล้ว rt.jar ที่เขาทำไว้ ดูผ่านๆ รู้สึกจะไม่มี swing,awt และคงขาดอะไรอีกหลายอย่าง
เลยสงสัยว่า ดีกว่านำ JRE 1.1.8 (rt.jar~1.4MB) มาใช้อย่างไรบ้างครับ

bact' said...

มัน สนุกดี น่ะครับ

bpitk said...

Just for fun :)
ผมเข้าใจว่า เขาคงต้องการ jt.jar แค่ class ที่จำเป็น หรือเปล่าครับ
คือเขาสามารถ เขียนJava1.6 แล้ว ติด runtime ขนาดเล็กๆ มี เฉพาะ class ที่เราจะใช้ จะใช้อะไรเพิ่ม ก็ D/L เพิ่ม? ถ้าทำได้คงดีเหมือนกัน
(คงไม่มีใครอยากใช้ JRE1.1.8แล้วมั้ง?)

bact' said...

ครับ แนวคิดคือประมาณนั้น

มีเท่าที่จะใช้

ที่คุณ Chanwit เค้าทดลอง ก็คือการถอดที่ไม่ใช้ทิ้งออกไปซะ

อันนั้นคืออันหนึ่ง

แต่ทีนี้ ตัว runtime ปัจจุบันนี่ มันยังไม่มีความสามารถในการไปดาวน์โหลดส่วนที่ขาดหายได้เอง
ถ้ามันไม่เจอคลาสไหน มันก็ทำได้แค่แจ้งว่าไม่เจอ แล้วก็หยุดการทำงาน

นี่คือสิ่งที่ Java Runtime รุ่นหน้า (Java 7) กำลังจะทำ คือให้สามารถดาวน์โหลดตัวที่ยังขาดอยู่มาได้

มันคงทำนองเดียวกับ MS Office รุ่นหลัง ๆ
ที่เราสามารถลงเฉพาะความสามารถหลัก ๆ ที่เราจะใช้ได้ พวกโปรแกรมเสริมอาจจะยังไม่ลง
เช่น Equation Editor
แต่มันก็ยังอยู่ในเมนูให้เลือกได้
ถ้าเมื่อไหร่ที่เราเลือกใช้ MS Office มันก็จะบอกว่า โปรแกรมเสริมนี้ ยังไม่ได้ติดตั้ง
ถ้าจะติดตั้ง ก็ใส่ซีดีมาซะ ก็จะติดตั้ง ใช้งานได้
-- คิดว่า Java Kernel ก็ประมาณเดียวกันครับ

----

JRE 1.1.8 นี่ ยังไม่มีไลบรารีสำคัญ ๆ หลายตัวทีเดียว
อย่าง Collections Framework, Swing พวกนี้ ที่มีเพิ่มเติมใน JRE 1.2
หรือ syntax ของภาษา ที่มีเพิ่มเติมใน Java 5

bpitk said...

ขอบคุณ สำหรับคำแนะนำที่ให้ครับ
ขอถามเพิ่มอีกนิด
แล้ว JRE ปัจจุบัน มันเพิ่ม classpath กลางอากาศได้ ใช่มั้ยครับ
แบบว่า D/L .jar มาแล้ว เพิ่ม classpath ชี้ไปที่ .jar ตัวใหม่นี้เลย
อะไรอย่างนี้ ทำได้ ใช่ไหมครับ
คือวันนี้ผมค้นๆเรื่องนี้อยู่ ดูแล้วน่าจะใช้คำสั่ง
System.setProperties ใช่มั้ยครับ
ขอบพระคุณที่แนะนำ :)

bact' said...

จริง ๆ ตัว Java นี่ มันทำ dynamic class loading ได้อยู่แล้วครับ
แต่ถ้าเป็นพวกคลาสที่เกี่ยวกับตัว vm รู้สึกว่าตอนนี้มันจะไม่ยอม เหตุผลเกี่ยวกับความปลอดภัย
ตัว Java Kernel คงต้องหาทางทำตรงนั้น
จะทำยังไงให้โหลดคลาสใน vm เข้ามาเพิ่มได้ โดยยังคงความปลอดภัยอยู่

เพิ่งเห็นว่า อีตา Ethan ทีมพัฒนา Java Kernel ก็เล่น blog tag กะเค้าด้วย :D

bact' said...

อ้อ เราใช้ System.setProperties เพื่อเซต Property java.class.path ได้จริงครับ
แต่ตัว JVM จะอ่าน Property นี้ตอนแรกแค่ครั้งเดียว เพราะฉะนั้นก็เลยไม่มีผลอะไรครับ

ถ้าไม่แก้ classpath อาจจะใช้วิธีโหลดไปใส่ในไดเรกทอรี ext/ ซึ่งเป็น default classpath อันนึง ไฟล์ .jar ทุกอันในไดเรกทอรีนี้จะถูกเพิ่มเข้าไปใน classpath

bpitk said...

ขอบคุณที่แนะนำครับ
จะลองค้นๆเรื่อง dynamic class loading ดู

bpitk said...

เอ๊ะ เพิ่งเห็น post ใหม่
ขอบคุณครับ จะลองเรื่อง /ext ดู
(ผมเกือบงมไปผิดทางซะแล้วสิ)

bact' said...

ผมก็ไม่เคยลองว่ามีวิธีอื่นรึเปล่านะครับ
ถ้าได้ผลยังไง อย่าลืม blog :D

chanwit said...

Hi,

BTW, my 7z trick is illegal except you build your own binary using JDK7.

GMz said...

ผมคิดว่าถ้ามันจะไม่พ่วง Swing กับ AWT มาให้ด้วยยิ่งดี เวลาที่จะพัฒนา Swing ก็ค่อยเพิ่ม swing.jar ในโปรแกรมของเราซะ ออกแนว swt

คงจะคล้าย ๆ กับ .dll ของ Microsoft นั่นแหละ อยากให้ตรงนี้เป็นจริงมากกว่า ให้มัน download ได้จากเว็บ

แล้วถ้าเป็นไปได้คือ อยากให้มันลดขนาดการใช้ memory ด้วย เพราะเทียบกับ .NET แล้วตอนเริ่มต้นไม่เท่ากันเลย .NET 6 MB แต่ Java ล่อไป 21 MB ตอนทำงาน พอคลิกนู่นคลิกนี่ .NET ก็เพิ่มไปที่ 12 MB ส่วน Java น่ะหรอเพิ่มเป็น 26 MB

GMz said...

ถ้า Java Kernel ทำแบบที่ผมบอกได้ คงมีแนวโน้มที่ Swing จะ Native กับ OS โดย 3rd party