轉載;http://blog.csdn.net/zly921112/article/details/61192747
java的jvm的內存分為三塊:
堆:
實例對象和數組對象。被所有線程共享。
分為新生代(1 Eden +2 survivor)和老年代(old )
為了垃圾回收,根據對象存活期的長短,分為新生代和老年代。垃圾回收時分別采用復制算法(所以有eden區和兩個survivor區)、標記整理和標記清除算法
棧:
基礎數據類型和自定義對象的引用。每個線程有一個棧區,棧中數據私有,其他棧不可訪問
方法區:
java8之前,方法區也叫(永久代)靜態區,包含整個程序中的唯一變量,如class、? ?static等等。被所有線程共享。運行時,常量池分配在這。
首先理清方法區的實現有永久代和元空間。jdk1.8前方法區的實現是永久代;jdk1.8后方法區的實現是元空間,使用的是本地內存。存放類的屬性、靜態變量、常量、方法等,字符串常量池還是存放在堆中,也僅僅是字符串常量的實例化對象在常量池中。