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。
内容如果有错误的地方欢迎来怼:),如果对您有帮助,希望您可以点个赞!!