Remove the permanent generation

1.Permanent generation là gì?

Trước khi tìm hiểu về permanent generation là gì chúng ta sẽ xem xét lại mô hình quản lý bộ nhớ trong Java. Về cơ bản thì vùng nhớ của JVM được OS cấp phát gồm có 4 phần:

  • Heap: lưu trữ các Object ( hầu hết với từ khóa new)
  • Stack: Lưu trữ các dữ liệu hoặc tham chiếu của các dữ liệu này và các địa chỉ trả về được cấp phát trong quá trình thực thi các method.
  • Perm Gem: Là nơi lưu trữ thông tin về các class, bao gồm:
  • Tên các class
  • Tên các method và mã bycode của nó
  • Các Object được sinh ra bởi JVM như các object thuộc các gói java.lang.Object và java.lang.exception.
  • Các thông tin được sử dụng cho việc tối ưu hóa các trình biên dịch (JITs)
  • Others
  • Code: lưu trữ mã bytecode của chương trình
  • Static: lưu trữ các static method, data Hình vẽ mô tả mô hình quản lý bộ nhớ của Java

JAVA-JVM-Memory.png

Hình vẻ mô tả sự khác nhau giữa Heap và Stack

stacknheap.png

Tại sao lại lại có vùng nhớ Perm Gem?

Mỗi một Object trong java đều có một tham chiếu kclass đến class của nó. Một điều chú ý nữa là bản thân mỗi class trong java cũng là một object cho nên nó cũng tham chiếu đến class của nó. Chúng ta gọi các class này là các super-class, chúng được tạo bởi JVM. Hình vẽ dưới sẽ mô tả một cách trực quan hơn

permGenObj.jpg

Jon Masamitsu tác giả đã tạo Pem Gen giải thích rằng: Việc phân tách 2 vùng nhớ giữa Object và Class giúp cho việc tối ưu hóa việc load các class trở nên hiệu quả hơn, do đó hiệu năng được tăng nên đáng kể bởi nó loại bớt việc load các class không được sử dụng trong quá trình chạy chương trình và giúp cho bộ Gabage collector hoạt động hiệu quả hơn.

2. Remove the permanent generation (to be continued)

3. Tài liệu tham khảo

https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

http://www.infoq.com/news/2013/03/java-8-permgen-metaspace


All Rights Reserved