Mem หลีกๆๆๆๆ

ก่อนอื่นเลยให้ดูนี่

รู้ไหมมีอะไรผิด ??? … อ่ะ ลองรันดู

java -XX:+DumpHeapOnOutOfMemoryError -Xmx8m memleak.MemLeak1

ผลปรากฎว่าผ่านไปไม่เท่าไรขึ้นข้อความมา จับใจความว่า

Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded

พร้อม Dump File น้อยๆ โผล่ขึ้นมาเลยจ้า …​ยังงี้ต้องจับเข้า VisualVM

VisualVM สุดยอดพนักงานสืบสวน

เห็นชัดเลยงานนี้ … เกิดอะไรขึ้นกัน ? ทำไม ?

คำตอบง่ายมากเพราะ HashMap ไง

HashMap คือแมพที่สร้างคีย์จาก Hash และ Hash ถูกสร้างจาก hashCode() แต่เราไม่ได้ implement ดังนั้น hashCode จึงเอามาจากค่าสุ่มตอนสร้าง Object สรุปคือเราสร้าง Object ที่ GC เก็บไม่ได้เพียบเลย (เพราะลิงค์กะ Map ด้วย)

ดังนั้นคราวหน้าโปรดระวังหากใช้ HashMap อย่าลืมสร้าง hashCode() ด๋วยยยย

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.