JVM中看常量和变量

常量就是有java关键字final修饰的量,final意味最终最后的意思。变量就是运行中会变化的量,在以前最开始学习java的过程中,我经常把常量变量和动态静态的之间的关联关系搞混淆。这里就记录一下细致的理解。

常量分为:全局静态常量,成员常量和局部常量

变量分为:全局静态变量,成员变量和局部变量

如上他们的分法都是一样的,那么我们就按组合细说一下

  1. 全局静态常量/全局静态变量
    静态static,它的含义就是在虚拟机JVM加载方法子初就会去方法区中分配内存对其修饰的量进行存储。重如下JVM结构图中我们可以看出方法区它是线程共享的,全局静态常量有final修饰它是最终的,不可修改的了,在多线程的应用中不用担心,但全局静态变量在多线程的使用过程中要考虑线程安全问题了。
  2.  成员常量和成员变量
    其实凡是常量都是存储在方法区的,因为常量在程序加载子初就是定了的,不会再改变,那么成员变量是如何存储的呢?
    如下图是JVM虚拟机栈(在上图的JVM组成部分中可以看到)的结构图,成员变量其实本身它的最开始的申明部分是在方法区中的,实际在方法体中使用的时候又分为两部分,动态链接+其实例,也就是说它在方法使用时,方法栈只存储了它的引用地址,而它真实的值是存储在堆中的。堆是线程共享的故而成员变量同样要考虑线程安全问题。

  3. 局部常量与局部变量
    综上,常量都是存储在方法区,而局部变量就是存储在虚拟机栈中的了,栈是线程私有的了,故而不需要考虑线程安全问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值