转载;http://blog.csdn.net/zly921112/article/details/61192747
java的jvm的内存分为三块:
堆:
实例对象和数组对象。被所有线程共享。
分为新生代(1 Eden +2 survivor)和老年代(old )
为了垃圾回收,根据对象存活期的长短,分为新生代和老年代。垃圾回收时分别采用复制算法(所以有eden区和两个survivor区)、标记整理和标记清除算法
栈:
基础数据类型和自定义对象的引用。每个线程有一个栈区,栈中数据私有,其他栈不可访问
方法区:
java8之前,方法区也叫(永久代)静态区,包含整个程序中的唯一变量,如class、 static等等。被所有线程共享。运行时,常量池分配在这。
首先理清方法区的实现有永久代和元空间。jdk1.8前方法区的实现是永久代;jdk1.8后方法区的实现是元空间,使用的是本地内存。存放类的属性、静态变量、常量、方法等,字符串常量池还是存放在堆中,也仅仅是字符串常量的实例化对象在常量池中。