这篇文章主要讲解了“java JVM内存区域的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java JVM内存区域的知识点有哪些”吧!
程序计数器
1.每个线程都有自己独立的程序计数器
2.线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;执行native方法是,值是undefined
3.程序计数器大小不会随着程序执行而变化,故不会发生OOM(OutOfMemory)
Java虚拟机栈
1.是线程私有的;
2.存储局部变量表、操作数栈、动态链接、方法出口;
3.局部变量表存放基本数据类型(不是对象,是int,short,boolean等8种,其中long和double占用两个变量空间)和对象引用;
4.线程请求的栈深度大于虚拟机允许的深度时,发生StackOverflowError异常;如果虚拟机栈动态扩展时,无法申请足够的内存则OutOfMemoryError。
本地方法栈
1.本地方法栈对虚拟机使用到的Native方法服务;
2.也会抛出StackOverflowError和OutOfMemoryError。
Java堆
1.在Java虚拟机启动时产生,是所有线程共享;
2.可再细分,如从内存回收角度来看,可再分为新生代、老年代、Eden空间、From Survivor空间、To Survivor空间;如从内存分配角度看,可再分为多个线程私有的分配缓冲区;
3.Java堆可以在物理上不连续,逻辑上连续即可;
4.如果堆中没有内存完成实例分配,并且堆的总大小也无法再扩展时,抛出OutOfMemoryError。
方法区
1.是各个线程共享的内存区域;
2.用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
3.当方法区无法满足内存分配需求时,将抛出OutOfMemoryError。
运行时常量池
1.运行时常量池是方法区的一部分;
2.存放Class文件中的常量信息、还会把翻译出来的直接引用也存储在这里;
3.常量池无法再申请到内存时抛出OutOfMemoryError。
直接内存
1.不是Java虚拟机运行时数据区的一部分,是Java程序通过Native函数直接申请机器的内存;
2.当内存不够时抛出OutOfMemoryError。
感谢各位的阅读,以上就是“java JVM内存区域的知识点有哪些”的内容了,经过本文的学习后,相信大家对java JVM内存区域的知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。