Java内存模型-Heap

Java堆(Heap)是JVM锁管理的内存最大的一块。这个区域的唯一作用就是存放对象实例.

例如:Person p = new Person()

那么p存放在栈(Stack),new Person()则存放在堆中。所以垃圾回收期主要回收工作都是在堆中进行的

总的来说,堆分为三个区域:新生代,老年代。

新生代又分为:Eden Space、Survivor Space。而Survicor Space又可以分为:From Space、To Space。

我们新建一个对象,例如:Person p = new Person() 那么对象实例首先会放在Eden Space。此时,JVM进行了一次GC,如果我们的p对象还在使用,那么它占用的内存就不会被回收。每个对象实例都有一个age阈值用来表明这块儿内存经过了几次GC。如果这个时候,Eden Space满了(或者快满了),且p对象的age阈值超过了JVM的设定,那么就会将p对象从Eden Space拷贝到To Space(当然Eden Space内存会被回收),N次GC后如果To Space也满了,就会把To Space中的对象实例拷贝到老年代并调换To Space和From Space的名。

如果老年代的内存也满了,就会方法Full GC。

如果您想只管的看新生代、老年代的内存情况变换。可以使用 jmap命令: jmap -heap pid 。 

看了很多大神的文章,然后把读后感写了出来,这块儿只是讲了对象的位置移动,之后会写一篇关于Full GC和Young GC。

内容如果有错误的地方欢迎来怼:),如果对您有帮助,希望您可以点个赞!!

猜你喜欢

转载自blog.csdn.net/qq_24497925/article/details/88078760
今日推荐