Java,虚拟机内存

1.前言

       看视频学习时,黑马程序员老师的一段话:“可以说,我们Java语言能发展的这么繁荣,也主要得益于运行时数据区的优良自治,它对自己的内存管理有一套非常非常优良的管理机制”。

2.JVM基本组成

        在我的上一篇博客里介绍了下JVM的基本组成,其中运行时数据区即JVM内存部分,是我们学习的重点。

在这里插入图片描述
在这里插入图片描述

3. 内存部分的认识与理解

        3.1,程序计数器程序计数器是当前线程所执行的字节码的行号指示器,即指定字节码文件执行哪一行。线程私有。且无内存溢出,是唯一一个在虚拟机中没有内存溢出情况的区域(至于为什么线程私有,比如两个线程A,B。A执行到30行,切换到线程B执行到第10行,那么再切回A,要是线程是公用的,那么A会执行第11行,这样就乱了

        3.2,堆内存用于存储对象实例和数组(数组本身也可以是对象)。堆,栈,方法区的存储详情见下图:

        3.3,虚拟机栈(HotSpot VM,目前使用最广泛的虚拟机,将虚拟机栈和本地方法栈直接合二为一了),用于存储Java方法(包括局部变量,操作数栈,动态链接,方法出口)(java里没有全局变量这个概念)。如下图,栈中存储了main()等方法,还有s1等引用变量,程序运行时,main(),set()方法依次入栈,然后set()出栈,…到程序最后main()出栈。(最后main()方法出栈时,连带main方法那个大框框里的s1,s2一起都出栈了)

        3.4,本地方法栈,执行native方法。和虚拟机栈的区别是,虚拟机栈是为Java方法服务的,而本地方法栈为Native方法服务,不属于java,可以是c,c++等。(native,即本地的)

        3.5,方法区,用于存储被JVM加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
在这里插入图片描述

4.内存溢出(Out of Memory Error)

        3.1 堆内存溢出:堆里面存储了对象实例,比如在while循环里不断的new对象,最终会发生堆溢出
        3.2 栈内存溢出:栈里面存储了Java方法,那么比如递归时没有中止条件,就可能造成栈溢出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值