哪些部分会出现内存溢出

  • 不会出现内存溢出的区域-程序计数器

  • 出现OutOfMemoryError的情况

① 堆内存耗尽-对象越来越多,又一直在使用,不能被垃圾回收

② 方法区内存耗尽-加载的类越来越多,很多框架都会在运行期间动态产生新的类

③ 虚拟机栈累积-每个线程最多会占用1M内存,线程个数越来越多,而又长时间运行不销毁时

  • 出现StackOverflowError的区域

①虚拟机栈内部-方法调用次数过多

方法区与永久代、元空间之间的关系

①方法区是JVM规范中定义的一块内存区域,用来存储类元数据、方法字节码、即时编译器需要的信息等

②永久代是Hotspot虚拟机对JVM规范的实现(1.8之前)

③元空间是Hotspot虚拟机对JVM规范的实现(1.8以后),使用本地内存作为这些信息的存储空间