JMM memory model

所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。

先看一张图,这张图能很清晰的说明JVM内存结构布局。

Java的内存结构****

JUtH_20121024_RuntimeDataAreas_6_MemoryModel
JUtH_20121024_RuntimeDataAreas_6_MemoryModel

JVM内存结构主要有三大块:堆内存方法区。堆内存是JVM中最大的一块由年轻代老年代组成,而年轻代内存又被分成三部分,Eden空间From Survivor空间To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;