Java Virtual Machine Memory Management

ในการจัดการ memory ของ jvm นั้นจะแบ่งส่วนต่างๆ ออกเป็นสามส่วนหลักๆคือ
Young Generation, Old Generation และ Permanent Generation ซึ่งแต่ละส่วนจะมีหน้าที่จัดการกับ memory อย่างชัดเจน

Screen Shot 2556-01-03 at 11.57.08 PM

ภาพนี้เป็นภาพที่สวยที่สุดแล้วจากความพยายามใช้ openoffice ของผม

ทีนี้เมื่อ Object ถูกสร้างขึ้นมามันจะถูกโหลดเข้าไปเก็บในส่วนของ Eden(Young Generation) ก่อน เมื่อ Garbage Collection(GC) ทำงานแล้วพบว่า Object นั้นยังทำงานอยู่(ยังทำงานอยู่ อาจหมายถึงยังมี Reference ถึง Object นั้น) มันจะถูกย้ายเข้าไปเก็บใน Survivor(อาจจะเป็น survivor 0 หรือ 1 จะเป็นอย่างใดอย่างหนึ่ง) และ Object ที่อยู่ใน Survivor ก่อนหน้านั้นจะถูกย้ายไปอยู่ที่ Tenured(survivor 0 และ survivor 1 จะทำงานสลับกันเช่น กวาดจาก eden มา survivor 0 ที่ survivor 1 จะถูกกวาดไป Tenured ถ้ากวาดจาก eden มาที่ survivor 1 ตรง survivor 0 จะถูกย้ายไป Tenured เป็นแบบนี้สลับกันไป) Object ที่ตายใน Eden จะถูก Clear ทิ้ง จากนั้น GC จะทำการตรวจสอบใน Tenured ถ้า Object ยังทำงานอยู่ก็ยังยังคงไว้ ถ้าหากไม่ทำงานแล้วก็เป็นอันสิ้นสุดกระบวนการใน Heap

ในส่วนของ Permanent Generation นั้นจะเป็นที่ที่เก็บ MetaData,Additional Info และอื่นๆ ซึ่งเป็นค่าที่ไม่ค่อยมีการเปลี่ยนแปลง(เป็นค่าจำเพาะของ class ที่ถูกสร้างเป็น object จะถูกเก็บไว้ที่นี้) ซึ่งส่วนตรงนี้จะมีรายละเอียดมาก ซึ่งถ้ามีโอกาสจะมาเพิ่มเติมครับ

สำหรับค่า config ผมเพิ่มเติมเข้าไปในภาพด้วยเพื่ออธิบายว่าตัวไหนใช้เพิ่มส่วนใด แต่จะยังไม่ครบผมขอเพิ่มคำอธิบายจากเว็บของ Oracle ไว้ด้านล่างนะครับ

-Xmx: maximum size of the Java heap
-Xms: initial heap size
-XX:MaxPermSize=: maximum size of permanent generation
-XX:PermSize=: initial size of the permanent generation
-XX:MaxNewSize=: maximum size of the young generation
-XX:NewSize=: initial size of the young generation
-XX:ParallelGCThreads=: number of threads used by the GC
-XX:MaxTenuringThreshold=: maximum number of copies inside the young generation before promotion
-XX:SurvivorRatio=: ratio between eden and one survivor space. The eden is times bigger than a survivor space
-XX:TargetSurvivorRatio=: desired fill level in % of a survivor space. The SAP JVM automatically adjusts the tenuring threshold (only ParNewGC)
-XX:SoftRefLRUPolicyMSPerMB=: threshold in ms per free MB for clearing unreferenced SoftReferences
-XX:GCHeapFreeLimit= minimum percentage of free space after a full GC before an OutOfMemoryError is thrown. Default value: 10.
-XX:GCTimeLimit= limit of proportion of time spent in GC before an OutOfMemoryError is thrown. Default value: 90
-XX:{+-}UseGCOverheadLimit use policy to limit of proportion of time spent in GC before an OutOfMemory error is thrown. Default value: +.



me on google plus+Jirawong Wongdokpuang

Advertisements

3 thoughts on “Java Virtual Machine Memory Management

  1. Pingback: Monitoring Java Virtual Machine « GreannetworK

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s