1. สร้างอินสแตนซ์ของคลาสโดยไม่ต้องใช้คีย์เวิร์ดใหม่
เมื่อคุณสร้างอินสแตนซ์ของคลาสโดยใช้คีย์เวิร์ดใหม่ ตัวสร้างทั้งหมดในห่วงโซ่ตัวสร้างจะถูกเรียกโดยอัตโนมัติ แต่ถ้าวัตถุใช้อินเทอร์เฟซ Cloneable เราก็สามารถเรียกเมธอด clone() ของมันได้ เมธอด clone() ไม่ได้เรียกตัวสร้างคลาสใดๆ หากคุณสร้างออบเจ็กต์โดยใช้รูปแบบ Factory จะง่ายมากที่จะใช้เมธอด clone() เพื่อสร้างอินสแตนซ์ออบเจ็กต์ใหม่
2. อย่าเริ่มต้นตัวแปรซ้ำๆ
ตามค่าเริ่มต้น Java จะเริ่มต้นตัวแปรให้เป็นค่าที่แน่นอนเมื่อมีการเรียกตัวสร้างคลาส สิ่งนี้ควรสังเกตเป็นพิเศษเมื่อคลาสได้รับมาจากคลาสอื่น เนื่องจากเมื่อวัตถุถูกสร้างขึ้นโดยใช้คีย์เวิร์ดใหม่ ตัวสร้างทั้งหมดในสายตัวสร้างจะถูกเรียกโดยอัตโนมัติ
3. ใช้ข้อยกเว้นด้วยความระมัดระวัง
ข้อยกเว้นไม่ดีต่อประสิทธิภาพ การโยนข้อยกเว้นก่อนจะสร้างวัตถุใหม่ ตัวสร้างของอินเทอร์เฟซ Throwable เรียกวิธีการดั้งเดิมที่ชื่อว่า fillInStackTrace() วิธีการ fillInStackTrace() จะตรวจสอบสแต็กและรวบรวมข้อมูลการติดตามการโทร เมื่อใดก็ตามที่มีข้อยกเว้นเกิดขึ้น jVM จะต้องปรับ call stack เนื่องจากมีการสร้างอ็อบเจ็กต์ใหม่ระหว่างการประมวลผล ข้อยกเว้นควรใช้สำหรับการจัดการข้อผิดพลาดเท่านั้น และไม่ควรใช้เพื่อควบคุมโฟลว์ของโปรแกรม
ให้ความสนใจกับสองประเด็นต่อไปนี้ (1) หลีกเลี่ยงการใช้ try/catch สำหรับตรรกะของแอปพลิเคชัน หากสามารถประมวลผลด้วยคำสั่งเชิงตรรกะ เช่น if และ while พยายามอย่าใช้คำสั่ง try/catch มากที่สุดเท่าที่จะเป็นไปได้ (2) ใช้ข้อยกเว้นซ้ำเมื่อจำเป็นต้องมีการจัดการข้อยกเว้น ให้นำวัตถุข้อยกเว้นที่มีอยู่กลับมาใช้ใหม่ให้มากที่สุด เนื่องจากในการจัดการข้อยกเว้น การสร้างอ็อบเจ็กต์ข้อยกเว้นจะใช้เวลาส่วนใหญ่
4. ด้าย
เธรดสามารถใช้ทรัพยากรระบบได้อย่างเต็มที่ ในขณะที่เธรดอื่นกำลังรอการอ่านและเขียนฮาร์ดดิสก์หรือเครือข่าย โปรแกรมสามารถประมวลผลและรันต่อไปได้ อย่างไรก็ตาม การใช้เธรดที่ไม่เหมาะสมจะส่งผลต่อประสิทธิภาพของโปรแกรมด้วย ตัวอย่าง: ใช้คลาส Vector อย่างถูกต้อง Vector ส่วนใหญ่จะใช้เพื่อบันทึกวัตถุประเภทต่าง ๆ (รวมถึงวัตถุประเภทเดียวกันและประเภทต่าง ๆ ) Vector มีฟังก์ชันการป้องกันความปลอดภัยของเธรด แม้ว่าวิธีการต่างๆ ในคลาส Vector จะซิงโครไนซ์กันก็ตาม แต่ถ้าคุณยืนยันว่าแอปพลิเคชันของคุณเป็นแบบเธรดเดียว การซิงโครไนซ์วิธีการเหล่านี้ก็ไม่จำเป็นเลย นอกจากนี้ เมื่อค้นหาวัตถุต่างๆ ที่เก็บไว้ใน Vector มักจะใช้เวลานานในการจับคู่ประเภท เมื่อวัตถุเหล่านี้เป็นประเภทเดียวกันทั้งหมด การจับคู่เหล่านี้จึงไม่จำเป็นเลย ดังนั้นจึงจำเป็นต้องออกแบบคลาสหรือคอลเลกชันแบบเธรดเดียวที่จะบันทึกอ็อบเจ็กต์ประเภทเฉพาะเพื่อแทนที่คลาส Vector
เกี่ยวกับการทำงานของเธรด โปรดทราบ: (1) ป้องกันการซิงโครไนซ์มากเกินไป หากโปรแกรมเป็นแบบเธรดเดียว ต้องแน่ใจว่าไม่ได้ใช้การซิงโครไนซ์ (2) การซิงโครไนซ์วิธีการแทนการซิงโครไนซ์ส่วนของโค้ดทั้งหมด การซิงโครไนซ์วิธีการมีประสิทธิภาพที่ดีกว่าการซิงโครไนซ์ส่วนของโค้ดทั้งหมด
5. ลองใช้ตัวแปรท้องถิ่น
พารามิเตอร์ที่ส่งผ่านเมื่อเรียกใช้เมธอดและตัวแปรชั่วคราวที่สร้างขึ้นระหว่างการโทรจะถูกบันทึกไว้ในสแต็ก (สแต็ก) ซึ่งเร็วกว่า
6. ใช้ตัวแปรคงที่ให้มากที่สุด
ให้อินสแตนซ์ทั้งหมดแชร์ตัวแปรนี้
7. พยายามระบุตัวแก้ไขสุดท้ายของคลาส
คลาสที่มีตัวแก้ไขขั้นสุดท้ายจะไม่ได้รับมา java.lang.String การระบุขั้นสุดท้ายสำหรับคลาส String จะป้องกันไม่ให้ผู้อื่นแทนที่เมธอด length() นอกจากนี้ หากชั้นเรียนถูกกำหนดให้เป็นที่สิ้นสุด วิธีการทั้งหมดของชั้นเรียนจะถือเป็นที่สิ้นสุด คอมไพเลอร์ Java จะมองหาโอกาสในการอินไลน์วิธีการสุดท้ายทั้งหมด ซึ่งสามารถปรับปรุงประสิทธิภาพได้โดยเฉลี่ย 50%
8. การสร้างวัตถุและการจัดสรรพื้นที่และขนาดที่เหมาะสม
อ็อบเจ็กต์ (หรืออินสแตนซ์) จำนวนมากมักถูกสร้างขึ้นในการเขียนโปรแกรม JAVA เนื่องจากระบบไม่เพียงใช้เวลาในการสร้างอ็อบเจ็กต์เท่านั้น แต่ยังอาจต้องใช้เวลาในการรวบรวมขยะและประมวลผลอ็อบเจ็กต์เหล่านี้ในภายหลังอีกด้วย ดังนั้น การสร้างอ็อบเจ็กต์มากเกินไปจะมีผลกระทบอย่างมากต่อประสิทธิภาพของโปรแกรม นอกจากนี้ คลาสจำนวนมากใน JAVA มีขนาดการจัดสรรพื้นที่ดีฟอลต์ สำหรับคลาส StringBuffer ขนาดพื้นที่จัดสรรเริ่มต้นคือ 16 อักขระ หากขนาดพื้นที่ของ StringBuffer ที่ใช้ในโปรแกรมไม่ใช่ 16 ตัวอักษร จะต้องดำเนินการเตรียมใช้งานให้ถูกต้อง
9. ใช้ I/O ที่ไม่ปิดกั้น
JDK เวอร์ชันต่ำกว่าไม่รองรับ I/O API ที่ไม่บล็อก เพื่อหลีกเลี่ยงการบล็อก I/O แอปพลิเคชันบางตัวจะสร้างเธรดจำนวนมาก (ในกรณีที่ดีกว่า จะใช้พูลบัฟเฟอร์) เทคนิคนี้สามารถเห็นได้ในแอปพลิเคชันจำนวนมากที่ต้องสนับสนุนสตรีม I/O พร้อมกัน เช่น เว็บเซิร์ฟเวอร์ JDK 1.4 เปิดตัวไลบรารี I/O ที่ไม่ปิดกั้น (java.nio)
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/Foxalien/archive/2009/12/18/5029659.aspx