本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片、视频等原文的内容)
若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/10073587.html
前言:
毕业后啥也不懂,水了一年,结果现在很多java基础的东西都不会,跳槽时候很艰难,现在开始恶补,首先是jvm--->深入理解java虚拟机(ps:买了半年都没翻过)
写博客的初始目的也只是为了记录一下自己认识到的知识点,而且写过的东西自己也不容易忘,有了博客也方便查看。
第一章是编译jdk,这节我是直接跳过了,我是实在看不进底层c++的实现,要理解的东西太多了,我的小脑袋根本不够用的,而且我认为没有什么实际价值(可以装个B?专门搞这个的大佬可别喷我啊!!!只是对我来说是真的意义不大,就跳过了)。
第二章就是java内存了,现在开始。
首先是我们的内存结构
1、程序计数器: 占用很小的空间,主要就是选取下一条需要执行的指令、循环、异常操作等(具体原理不懂=。=)
2、java虚拟机栈: 这里就是平常说的堆跟栈中的”栈“,指的是局部变量表中的八种类型(int、short...)、对象引用(reference)还有returnAddress类型(指向了一条字节码指令的地址)
3、本地方法栈: 为native方法服务(这是啥东西=。=)
4、堆: 堆跟栈中的“堆”,存放对象实例,gc的主要管理区域
5、方法区: 跟堆类似,但是存储的是虚拟机中加载的 类信息、常量、静态变量等,只是堆的一个逻辑部分,别名-Non-Heap目的就是为了区分开来。堆中有 新生代、老年代,方法区这部分叫做永久代(只是把这块空间也交给了GC管理)
ps:
6、运行时常量池: 处于方法区,记录编译期生成的各种字面量和符号引用。
7、直接内存: 不知道是啥,应该没什么屌用。
第一节就记录一下存储结构吧,下一节来记录堆栈空间的溢出实验。