Burning up the Heap (Part II)
Posted by , Aug 25 2006, 02:35 PM in Java & Performance
ผมหายหัวไปเสียนาน ... เป็นเพราะมีเรื่องยุ่งๆ หลายอย่างเข้ามาในชีวิต (ตอนนี้ก็ยังยุ่งอยู่)
ไม่ค่อยจะได้มีเวลาเข้ามาอ่าน หรือ เข้ามาโพสท์เลย
จริงๆ แล้ว entry นี้ ผมเขียนไว้ตั้งแต่เมื่อปลายปีที่แล้ว (พฤศจิกายน 2547) แต่ว่า ไม่ได้เอามาตรวจทาน แล้วโพสท์ซักที ... วันนี้ถือว่าได้โอกาส เอามาตรวจทาน แล้วโพสท์ต่อให้จบเสียที
เชิญอ่านได้เลยครับ
ต่อจากตอนที่แล้วนะครับ
จากปัญหาที่เกิดขึ้น ผมก็นึกถึงวิธีที่น่าจะแก้ปัญหาไว้ได้วิธีหนึ่ง ซึ่งขอเก็บไว้พูดสรุปในตอนจบดีกว่า
เนื่องจากว่า ขณะที่แก้ปัญหา มีเวลาค่อนข้างน้อย ดังนั้นจึงไม่มีเวลาในการหาข้อมูลมากนัก ตอนนี้มาลองหาข้อมูลดูอีกครั้งหนึ่ง จนไปเจอเวปของ Xalan ซึ่งได้เขียน อธิบาย XPathAPI ไว้ดังนี้
NOTE: In particular, each call to this method will...
Read more...
Burning up the Heap (Part I)
Posted by , Nov 13 2005, 07:27 PM in Java & Performance
วันหยุดนี้ ช่างเป็นวันหยุดที่น่าเบื่อเสียจริงๆ ... แทนที่จะได้ออกไปเดินเที่ยว ช็อปปิ้ง กลับต้องติดฝนอยู่บ้าน
ไหนๆ ก็ไหน ... เลยคิดว่าเขียน Blog ซะหน่อยดีกว่า (โอ้ ไม่ได้เขียนมาเป็นเดือนเลย .. ทำไมเราขี้เกียจอย่างนี้)
ช่วงเดือนที่ผ่านมา ผมได้งานที่น่าสนใจมาอย่างนึง คือ มีโปรแกรมตัวนึง (เป็น Java) ที่มีปัญหาเรื่อง performance ... เรียกได้ว่า เข้าขั้นวิกฤต ... ผมมีหน้าที่ต้องไปช่วย developer ที่ทำโปรแกรมตัวนี้ แก้ปัญหานี้
เนื่องจากว่า ผมไม่ได้ร่วม develop โปรแกรมนี้มาด้วยตั้งแต่ต้น จึงต้องเริ่มจากการซักถามกันก่อนว่า โปรแกรมนี้ทำงานอย่างไร ใช้ library อะไรบ้าง มีตรงไหนที่ต้องทำงานกับ file หรือ DB อย่างไร
เท่าที่สอบถามเบื้องต้น มีหลายอย่างที่น่าสงสัย ... ตั้งแต่ XML Parser, Hibernate ไปยัน แม้แต่การใช้ JDBC ธรรมดาๆ นี่แหละ
ซึ่งอาการที่พบ ถือว่า ไม่ธรรมดาเลย เพราะ งานเป็นแค่การ process ข้อมูล XML ธรรมดา แล้วเอาผลลัพธ์ไปลงใน database ... แต่ใช้เวลานานมาก ... ที่ข้อมูลระดับพัน record (XML ไม่กี่ MB) ใช้เวลาหลายชั่วโมง!!!
คงจะต้องมีอะไรผิดพลาดแน่นอน (Java ไม่ได้แย่ขนาดนั้น)
MappedByteBuffer : The Phantom Menance
Posted by , Sep 15 2005, 06:18 PM in Java & Performance
เคยคิดเอาไว้ว่าจะเขียนเกี่ยวกับการใช้งาน class MappedByteBuffer (package java.nio) แต่ยังไม่ได้มีเวลาเขียนซักที
พอดี มีเหตุการณ์หนึ่งเกิดขึ้น ผมเลยคิดว่า น่าจะเขียนไว้ซะหน่อย
ขอพูดถึง MappedByteBuffer ซักนิดนึงก่อน ... ใน Java New I/O API มี feature ตัวหนึ่งที่น่าสนใจคือ Memory Mapped File ซึ่งเป็นการ map บางส่วนหรือทั้งหมดของ File เข้ากับ memory address เพื่อความสะดวกในการทำงาน และ feature นี้ได้ใช้ความสามารถของ OS เข้าช่วย ดังนั้น เราจึงสามารถคาดหวัง performance ที่ดี ได้จากการใช้ API ตัวนี้
เมื่อประมาณปลายปีที่แล้ว ผมก็ได้เลือกที่จะใช้ MappedByteBuffer เป็น API ในการอ่าน binary data ออกมาจา file โดยสร้าง interface มา wrap การทำงานของมันไว้ เพื่อให้ code ที่มาใช้งานหน้าที่นี้ จะได้ไม่ต้องผูกกับ API ตัวนี้โดยตรง ... ซึ่งจากที่ได้ใช้งานมาก็ไม่ปัญหาอะไร
เมื่อไม่นานมานี้ ผมได้เจอปัญหาว่า ไม่สามารถทำงานบางอย่างกับ file ที่เคยได้ map เอาไว้ได้ (แต่ไม่ได้ใช้แล้ว และปิด channel ของมันไปแล้ว) .. เช่น การเรียก method delete() บน object File ตัวนั้น เพื่อที่จะลบไฟล์นั้น .. method นี้จะ...
Read more...
Vocaloid: Virtual Vocalist
Posted by , Aug 15 2005, 11:50 PM in สัพเพเหระ
เคยตั้งใจไว้ว่าจะมี Blog เอาไว้เขียนเรื่องอื่นๆ ที่ไม่เกี่ยวกับเรื่อง technical หรืองานที่ทำอยู่ ... แต่จนแล้วจนรอด ก็ไม่ได้เริ่มซะที
พอดีเจออะไรน่าสนใจ เกี่ยวกับ Software เลยฝากไว้ที่นี่ก่อนละกัน .. เผื่อมีใครสนใจเหมือนๆ กันบ้าง
ช่วงหลายๆ ปีมานี้ ถ้าใครได้ติดตาม technology เกี่ยวกับ ดนตรีและการบันทึกเสียง (ในระบบ Digital) จะเห็นได้ว่า แนวโน้มค่อนข้างจะพุ่งเข้าหา "อุปกรณ์" ที่เป็น Software มากขึ้น ... ปัจจุบันนี้ มีเครื่อง PC ซักเครื่องนึง เราก็สามารถสร้างงานระดับ demo เนี๊ยบๆ หรือแม้กระทั่งงานระดับ semi-pro ได้แล้ว ด้วยโปรแกรมที่มีให้เลือกมากมายอยู่ในท้องตลาด ... ซึ่งข้อดีของมันก็ชัดเจนคือ ราคาที่ค่อนข้างจะถูกกว่าการซื้ออุปกรณ์ที่เป็น Hardware .. ขนาดที่เล็กกว่า (จะเรียกว่าขนาดเล็ก ก็คงไม่ถูกนัก เพราะบางโปรแกรมก็กินเนื้อที่เป็น Gigabyte เหมือนกัน
) ... และยังสามารถ upgrade ได้ง่าย ซึ่งบริษัทที่ทำโปรแกรมพวกนี้ก็จะหมั่น update อยู่เรื่อยๆ เพื่อรักษาฐานลูกค้าของตัวเองไว้
ช่วงสองสามปีมานี้...
Read more...
New I/O (Part VII)
Posted by , Jul 23 2005, 02:38 AM in Java & Performance
ในที่สุด ก็มาถึงตอนสุดท้ายของเรื่องนี้จนได้ (จะขี้เกียจเลิกเขียนกลางทางก็กระไรอยู่
)
จากหกตอนที่ผ่านมาจะเห็นได้ว่า เรายังไม่เจอข้อดีของการใช้ New I/O เลย ซึ่งในกรณีนี้ เราทดสอบกับ File I/O ดังนั้น feature Asynchronous multiplex I/O ซึ่งเป็น feature เฉพาะของ New I/O แต่ใช้ไม่ได้กับ File I/O จึงไม่นับเป็นประเด็นที่เราจะเอามาพิจารณา
แน่นอนว่า New I/O มันจะต้องมีข้อดีของมันบ้าง (ไม่งั้นคงไม่บากหน้าเขียนมาจนขนาดนี้) .. ก่อนจะไปถึงตรงนั้น ลองกลับไปพิจารณาการใช้งาน Buffer กันอีกครั้งก่อน ยังมีประเด็นที่ยังไม่ได้พูดถึงอยู่อีก
in = new FileInputStream(file);
channel = in.getChannel();
buffer = ByteBuffer.allocateDirect(BUFFER_SIZE);
}
Code ด้านบนนี้มาจากตอนที่ 4 ซึ่ง code นี้จะแสดงการ initialize ตัว DirectBufferIO ......
Read more...











on Software Testing Myths: The Concept