JVM系列主要分享自己都虚拟机的理解,我自学时的知识框架多来源于《深入理解Java虚拟机_JVM高级特性与最佳实践》这本书,感兴趣的朋友可直接去阅读这本书。

  本系列暂定有3部分,它们是学习的重点内容:Java内存区域、垃圾收集、类加载机制。

 

正文

  该篇随笔主要分享下我都Java内存区域的理解,以下是我学习的结果,思维导图。

 

  Java内存区域如下:

1

  分为共享区域:方法区、堆,私有区域:虚拟机栈、本地方法栈、程序计数器。他们各自职责如下

  程序计数器:一种上下文指示器,帮助分支、循环、跳转、异常等功能

  虚拟机栈:是方法执行内存模型。执行一个方法会创建栈帧存储局部变量表、操作数栈、动态链接、方法出口等。其中局部变量表存放了编译期可知的各种基本数据、对象引用类型。

  本地方法栈:为Native方法提供的栈

  堆:一般用于存放对象实例,对象实例数据包括对象头,对象体,填充。对象头包含了对象重要信息如:HashCode、GC年龄、锁状态以及指向类对象的指针。

  方法区:存储已被加载的类信息、常量、静态变量。

 

  常见异常:OOM:内存溢出,在堆、栈、方法区都可能发生该异常。

        StackOverflow:栈溢出异常