Archive

Posts Tagged ‘JVM’

ประเภทของ Object ใน Java Virtual Machine และ Common Language Runtime

ใน Java Virtual Machine (JVM) และ Common Language Runtime (CLR) นั้น จะมี Type อยู่สองประเภทคือ Value Type และ Reference Type ซึ่ง Value Type จะเป็น Type ที่ Object จะเกิดการ Copy ตัวมันเองเมื่อมีการ Assign ตัวมันให้กับตัวแปรอื่น ส่วน Reference Type จะเป็น Type ที่ Object อาศัยอยู่บน Heap เท่านั้น ซึ่งต้องใช้ new ในการสร้างขึ้นมา

ใน JVM นั้น เราไม่สามารถสร้าง Value Type เพิ่มได้ ต้องใช้อันมี่ทีอยู่แล้วเท่านั้น ซึ่งแตกต่างจาก CLR ที่เราสามารถสร้าง Value Type เพิ่มได้ ทำให้ CLR มีข้อได้เปรียบอยู่หลายอย่าง เช่น

  • Performance ที่เพิ่มขึ้น เนื่องจาก Value Type ไม่จำเป็นต้องจอง Memory บน Heap
  • ติดต่อกับ Native Code ได้ง่ายขึ้น เนื่องจาก Type ใน Native Code จะเป็น Value Type

Object ที่เป็นชนิด Value Type นั้นสามารถแปลงเป็น Reference Type ได้ด้วยการ Wrap ไว้ใน Object ที่เป็น Reference Type อีกทีหนึ่ง ซึ่งการ Wrap นี่จะเรียกว่า “Boxing” ส่วนการแปลงกลับมาเป็น Value Type อีกครั้งจะเรียกว่า “Unboxing”

การ Boxing นั้น ใน C# จะสามารถ Assign ตัว Object ที่เป็นประเภท Value Type ใส่ตัวแปรที่เป็นคลาส System.Object ได้ทันที การ Unboxing นั้นก็เหมือนกัน สามารถ Cast กลับมาได้ทันที ส่วน Java นั้นเราจำเป็นต้องใช้คลาสที่มีมาให้อยู่แล้ว เช่น java.lang.Integer สำหรับ Wrap ตัว Object ที่เป็นชนิด int