หลายคนคงเคยบ่นว่า ทำไมตัว 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 comments:
ผมสงสัยน่ะครับ
คือ ลองแวะไปดู แล้ว 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 กะเค้าด้วย :D
อ้อ เราใช้ System.setProperties เพื่อเซต Property java.class.path ได้จริงครับ
แต่ตัว JVM จะอ่าน Property นี้ตอนแรกแค่ครั้งเดียว เพราะฉะนั้นก็เลยไม่มีผลอะไรครับ
ถ้าไม่แก้ classpath อาจจะใช้วิธีโหลดไปใส่ในไดเรกทอรี ext/ ซึ่งเป็น default classpath อันนึง ไฟล์ .jar ทุกอันในไดเรกทอรีนี้จะถูกเพิ่มเข้าไปใน classpath
ขอบคุณที่แนะนำครับ
จะลองค้นๆเรื่อง dynamic class loading ดู
เอ๊ะ เพิ่งเห็น post ใหม่
ขอบคุณครับ จะลองเรื่อง /ext ดู
(ผมเกือบงมไปผิดทางซะแล้วสิ)
ผมก็ไม่เคยลองว่ามีวิธีอื่นรึเปล่านะครับ
ถ้าได้ผลยังไง อย่าลืม blog :D
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
Post a Comment