หลายคนคงเคยบ่นว่า ทำไมตัว 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:
Java,
Java Kernel
13 responses to “Java Kernel”
ผมสงสัยน่ะครับคือ ลองแวะไปดู แล้ว rt.jar ที่เขาทำไว้ ดูผ่านๆ รู้สึกจะไม่มี swing,awt และคงขาดอะไรอีกหลายอย่าง เลยสงสัยว่า ดีกว่านำ JRE 1.1.8 (rt.jar~1.4MB) มาใช้อย่างไรบ้างครับ
มัน สนุกดี น่ะครับ
Just for fun :)ผมเข้าใจว่า เขาคงต้องการ jt.jar แค่ class ที่จำเป็น หรือเปล่าครับ คือเขาสามารถ เขียนJava1.6 แล้ว ติด runtime ขนาดเล็กๆ มี เฉพาะ class ที่เราจะใช้ จะใช้อะไรเพิ่ม ก็ D/L เพิ่ม? ถ้าทำได้คงดีเหมือนกัน(คงไม่มีใครอยากใช้ JRE1.1.8แล้วมั้ง?)
ครับ แนวคิดคือประมาณนั้นมีเท่าที่จะใช้ที่คุณ 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
ขอบคุณ สำหรับคำแนะนำที่ให้ครับขอถามเพิ่มอีกนิดแล้ว JRE ปัจจุบัน มันเพิ่ม classpath กลางอากาศได้ ใช่มั้ยครับ แบบว่า D/L .jar มาแล้ว เพิ่ม classpath ชี้ไปที่ .jar ตัวใหม่นี้เลย อะไรอย่างนี้ ทำได้ ใช่ไหมครับคือวันนี้ผมค้นๆเรื่องนี้อยู่ ดูแล้วน่าจะใช้คำสั่ง System.setProperties ใช่มั้ยครับขอบพระคุณที่แนะนำ 🙂
จริง ๆ ตัว Java นี่ มันทำ dynamic class loading ได้อยู่แล้วครับแต่ถ้าเป็นพวกคลาสที่เกี่ยวกับตัว vm รู้สึกว่าตอนนี้มันจะไม่ยอม เหตุผลเกี่ยวกับความปลอดภัยตัว Java Kernel คงต้องหาทางทำตรงนั้นจะทำยังไงให้โหลดคลาสใน vm เข้ามาเพิ่มได้ โดยยังคงความปลอดภัยอยู่เพิ่งเห็นว่า อีตา Ethan ทีมพัฒนา Java Kernel ก็เล่น blog tag กะเค้าด้วย 😀
อ้อ เราใช้ System.setProperties เพื่อเซต Property java.class.path ได้จริงครับแต่ตัว JVM จะอ่าน Property นี้ตอนแรกแค่ครั้งเดียว เพราะฉะนั้นก็เลยไม่มีผลอะไรครับถ้าไม่แก้ classpath อาจจะใช้วิธีโหลดไปใส่ในไดเรกทอรี ext/ ซึ่งเป็น default classpath อันนึง ไฟล์ .jar ทุกอันในไดเรกทอรีนี้จะถูกเพิ่มเข้าไปใน classpath
ขอบคุณที่แนะนำครับจะลองค้นๆเรื่อง dynamic class loading ดู
เอ๊ะ เพิ่งเห็น post ใหม่ขอบคุณครับ จะลองเรื่อง /ext ดู(ผมเกือบงมไปผิดทางซะแล้วสิ)
ผมก็ไม่เคยลองว่ามีวิธีอื่นรึเปล่านะครับถ้าได้ผลยังไง อย่าลืม blog 😀
Hi,BTW, my 7z trick is illegal except you build your own binary using JDK7.
ผมคิดว่าถ้ามันจะไม่พ่วง Swing กับ AWT มาให้ด้วยยิ่งดี เวลาที่จะพัฒนา Swing ก็ค่อยเพิ่ม swing.jar ในโปรแกรมของเราซะ ออกแนว swt คงจะคล้าย ๆ กับ .dll ของ Microsoft นั่นแหละ อยากให้ตรงนี้เป็นจริงมากกว่า ให้มัน download ได้จากเว็บแล้วถ้าเป็นไปได้คือ อยากให้มันลดขนาดการใช้ memory ด้วย เพราะเทียบกับ .NET แล้วตอนเริ่มต้นไม่เท่ากันเลย .NET 6 MB แต่ Java ล่อไป 21 MB ตอนทำงาน พอคลิกนู่นคลิกนี่ .NET ก็เพิ่มไปที่ 12 MB ส่วน Java น่ะหรอเพิ่มเป็น 26 MB
ถ้า Java Kernel ทำแบบที่ผมบอกได้ คงมีแนวโน้มที่ Swing จะ Native กับ OS โดย 3rd party