Java虛擬機是Java語言的核心,在程序運行的過程中,它不只分配內存空間,還有垃圾回收機制等,而JVM內存結構中分為年輕代和老年代兩部分。
年輕代指的是剛被創建的對象,包括新生代(Eden和Survivor區)和大對象(Humongous Area)這三個區域。在這些區域中,對象最初被放置在Eden區,在每次垃圾回收后,無法被回收的對象就被移入Survivor區。一般來說,Survivor區分為兩個區域,分別是from區和to區,每次垃圾回收之后,from區和to區的內容會互換,Survivor區也就是一塊“依次往復”的空間。
public class Person{
public String name;
public int age;
}
Person p1 = new Person();
p1.name = "Tom";
p1.age = 18;
老年代指的是一些存在時間較久的對象,應用程序中大部分的對象都會通過年輕代的垃圾回收機制離開內存,但有些對象無法被回收(因為回收可能會導致程序異常),就會被放入老年代。在Java 8及以前的版本中,不同年齡段的對象被劃分為不同的代,年齡足夠高的對象會被移至老年代。
了解Java虛擬機中的年輕代和老年代分配,對于理解Java程序內存的管理和垃圾回收機制是至關重要的。