java虚拟机内存管理图如下图所示:
1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成:
1.方法区:
1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法,4.接口等),常量,静态变量,即时编译器编译后的代码等数据。
2.垃圾回收器也会光顾这个区域,例如常量池。
3.HotSpot中用方法区来实现永久代。这样的做的好处就是,垃圾回收器可以像管理java堆一样管理这部分内存,省去了为方法区编写内存管理的工作,注意的是这
仅仅限于HotSpot中,其他的虚拟机并没有永久代这个概念,虚拟机规范中,永久代不等于方法区,而且没有进行详细的规范说明。用方法区实现永久代并不是一个很好的途径
HotSpot在JDK1.7中进行的改进。
2.java堆:
1.存储对象实例,可以人作为所有对象的实例存储在这里,涉及编译优化和虚拟机优化的时候有些对象实例并不存储在这里。
2.垃圾收集器管理的主要区域。
3.长时间存活的对象实例会被放入老年代去,不长期存活的会在新生代中。
4.当对空间申请完后会抛出OutOfMemory的内存溢出异常。