Java หน่วยความจำ: กองพื้นที่และเก็บขยะ

เรียนรู้เกี่ยวกับวิธีการจัดการหน่วยความจำ Java ผ่านพื้นที่กองและเก็บขยะ ทำความเข้าใจเกี่ยวกับการจัดสรรหน่วยความจำที่สามารถช่วยหลีกเลี่ยงการรั่วไหลของหน่วยความจำในโปรแกรม Java

A+ A-

เมื่อเร็ว ๆ นี้ผมเขียนโปรแกรม Java ซึ่งเมื่อทำงานต้องค่อนข้างบิตของ หน่วยความจำ และผมเริ่มที่จะรับข้อผิดพลาด OutOfMemory:

 ข้อผิดพลาด: java.lang.OutOfMemoryError: พื้นที่กอง Java 

นี้มักจะเกิดขึ้นเมื่อเราจำเป็นต้องเรียกใช้โปรแกรมหน่วยความจำซด ต่อไปนี้เป็นไม่กี่วิธีที่จะแก้ปัญหาดังกล่าว

พื้นที่กอง Java คืออะไร?

ครั้งแรกของทั้งหมดช่วยให้เข้าใจสิ่งที่เป็นพื้นที่กอง ดี, Java ใช้หน่วยความจำส่วนใหญ่ในการเตรียมการของ กองและสแต็ค Java ช่วยให้พารามิเตอร์ที่จะถูกส่งผ่านจาก วิธีการโทรวิธีการที่เรียกว่า ในรูปแบบของโครงสร้างสแต็ค (ที่พารามิเตอร์คือจะผลักดันและโผล่ออกมาของสแต็คตามต้องการ) บนมืออื่น ๆ ที่กองเป็นพื้นที่หน่วยความจำเข้าถึงสุ่มที่ Java สร้างและเก็บวัตถุ Java สร้างวัตถุภายในพื้นที่กองหินนี้ใดก็ตามที่มันพบว่าห้องพอที่จะมีวัตถุ ดังนั้นเมื่อคุณสร้างวัตถุใหม่ (เช่นใหม่ สตริง () ;) วัตถุที่ได้รับการสร้างขึ้นในพื้นที่กองและหมกมุ่นอยู่กับหน่วยความจำที่จะสามารถปรับตัวให้เข้า ในระหว่างการเก็บขยะ, Java ปลดปล่อยพื้นที่กองของวัตถุเหล่านั้นซึ่งมีการอ้างอิงไม่ได้ แต่ถ้าจำนวนการอ้างอิง (คือ "ต้อง") วัตถุคงเพิ่มขึ้นและเราไม่เคารพพวกเขา -The JVM วิ่งออกไปจากพื้นที่กอง

ปริมาณของหน่วยความจำที่ชั้นจะต้องขึ้นอยู่กับจำนวนและชนิดของข้อมูลสมาชิกของ

  1. ชั้นเองต้องมีอย่างน้อย 8 ไบต​​์
  2. ข้อมูลสมาชิกทุกคนต้อง 4 ไบต์ (Long และดับเบิลต้องใช้ 8 bytes) แม้จะเป็นตัวแปรบูลีนคือการใช้ 4 ไบต์แม้ว่ามันจะต้องการเพียงหนึ่งบิตจะได้รับการจัดเก็บไว้
  3. จำนวนหน่วยความจำที่ใช้เติบโตในชิ้น 8 ไบต​​์
เพิ่มประสิทธิภาพโปรแกรมจาวาของคุณ

ขั้นตอนแรกที่จะได้รับการแก้ไขปัญหานี้ควรจะไปผ่านโปรแกรมและดูว่ามันจะได้รับการแก้ไขเพื่อที่จะทำให้มันใช้หน่วยความจำน้อย ตั้งแต่ยาวค่าใช้จ่ายของหน่วยความจำที่ได้รับต่ำมากเมื่อเทียบกับสิ่งที่มันเป็นช่วงทศวรรษที่ 1960 และเขียนโปรแกรมได้กลายเป็นฟุ่มเฟือยสวยในแง่ของค่าเผื่อหน่วยความจำโปรแกรมของพวกเขา แต่ยังคงไม่บ่อยกว่าเราต้องเขียนโปรแกรมที่จำเป็นต้องใช้หน่วยความจำมากขึ้นกว่าที่มีอยู่ ตระหนี่ในบริบทของการใช้หน่วยความจำที่ดีอยู่เสมอเพราะไม่เพียง แต่จะช่วยลดโอกาสของความผิดพลาดของโปรแกรม แต่บางครั้งก็จะช่วยเพิ่มความเร็วของการดำเนินการ

คุณควรกำหนดวัตถุที่จะเป็นโมฆะเมื่อพวกเขาไม่จำเป็นต้องมีในรหัสของคุณ นี่คือสิ่งสำคัญยิ่งถ้าคุณกำลังเรียกวงในที่ที่คุณสร้างวัตถุ (s) แต่แล้วก็ไม่ทิ้งพวกเขาเมื่อพวกเขาไม่จำเป็นต้อง

ทำให้การใช้งาน Java วิธีการเก็บขยะ

ขั้นตอนที่สองต่อการเพิ่มประสิทธิภาพการใช้งานหน่วยความจำที่อาจจะอย่างชัดเจนเรียกวิธีการเก็บขยะ Java อัตโนมัติเรียกวิธีการนี​​้เป็นและเมื่อจำเป็นและอิสระพื้นที่หน่วยความจำที่มีวัตถุที่ไม่ได้อ้างถึง แต่คุณยังสามารถเรียกวิธีการนี​​้อย่างชัดเจนในรหัสของคุณ (เช่นหลังจากที่ "งานใหญ่" จะประสบความสำเร็จและถัดไป "งานใหญ่" เป็นเรื่องเกี่ยวกับที่จะเริ่มต้น) ที่จะเรียกเก็บขยะที่ใช้:

 Runtime.getRuntime () GC (). 

คุณสามารถตรวจสอบสถานะของหน่วยความจำก่อนและหลังการ GC () วิธีการที่เรียกว่า

 System.out.println ( "nnCalling มูลฝอย Collectornn");
System.out.println ( "หน่วยความจำฟรีก่อน:" + Runtime.getRuntime () freeMemory ().);
Runtime.getRuntime () GC ().
System.out.println ( "หน่วยความจำฟรีหลัง:". + Runtime.getRuntime () freeMemory ());
System.out.println ( "คอลเลกชัน nnGarbage finishednn"); 

freememory () วิธีการส่งกลับจำนวนหน่วยความจำฟรีที่มีอยู่ในวัดไบต์ สำหรับวิธีการอื่น ๆ โดย Runtime ระดับเห็น Java API

ให้หน่วยความจำมากขึ้นเพื่อ JVM

ความพยายามสำหรับการใช้งานหน่วยความจำเพิ่มประสิทธิภาพแม้จะมีบางครั้ง JVM ไม่แน่นอนความต้องการหน่วยความจำเพิ่มเติม ในกรณีดังกล่าวเราสามารถบอก JVM ผ่านบรรทัดคำสั่งที่จะใช้จำนวนเงินที่ระบุของหน่วยความจำ:

 Java -Xms2000m -Xmx3500m 

-Xms และ -Xmx สวิทช์ระบุจำนวนพื้นที่ swap (หน่วยความจำเสมือน) ที่ JVM สามารถใช้ในเครื่องของคุณ

-Xms ระบุขั้นต่ำ (เช่นเริ่มต้น) จำนวนหน่วยความจำ

-Xmx ระบุจำนวนเงินสูงสุดของหน่วยความจำที่สามารถใช้ JVM

ค่าหน่วยความจำเหล่านี้ควรจะระบุไว้ในเมกะไบต์

ดังนั้นนี้เป็นเรื่องเกี่ยวกับการบริหารจัดการหน่วยความจำ Java ผ่านพื้นที่กองและกลไกการเก็บขยะ เหล่านี้เป็นทางเลือกที่ชาญฉลาดและทุกโปรแกรม Java ควรมีความเข้าใจที่ชัดเจนของวิธีการจัดการหน่วยความจำ Java เพียงคุณเท่านั้นที่จะสามารถได้อย่างมีประสิทธิภาพทำงานในหลักสูตรเร่งรัดหน่วยความจำ

Ads

หุ้น

เมื่อเร็ว ๆ นี้

ทางเลือกที่ดีที่สุดอูบุนตูที่มองหาถ้าคุณเป็นคนรักของลินุกซ์

ขอเริ่มต้นโดยได้รับคุ้นเคยกับบางสิ่งบางอย่าง; พื้นฐาน แต่บิ...

วิธีการเพิ่มลายเซ็นใน Gmail กล่องขาเข้า - เพิ่มลายเซ็นของ Google ใน Gmail

กล่องขาเข้าโดย Google เป็นหนึ่งในสิ่งที่ดีที่สุดของ Google ...

Weekly Tech News: Nokia, Google และนินเทน

สวัสดีครับทุกคนก็ศุกร์ 3 มีนาคมและเช่นเดียวเสมอเรากลับมาพร้...

โครงการ Pi ราสเบอร์รี่สำหรับมือใหม่ - คุณสามารถทำอะไรกับราสเบอร์รี่ Pi

ราสเบอร์รี่ Pi เป็นชุดของพลังงานต่ำคอมพิวเตอร์บอร์ดเดียวที่...

VPN ที่ดีที่สุดสำหรับ Android 2017 - วิธีการใช้ VPN ใน Android

ไปเป็นวันเมื่อ VPNs เพียงสำหรับเทคโนโลยี savvies และแฮกเกอร...

ความคิดเห็น