阿里P8面试官问你:如何证明工作内存=虚拟机栈?

我们都知道主内存,即直接内存(Native Memory)。那工作内存是什么呢?
在这里插入图片描述

工作内存四个字,可能很多人是从周志明的《深入理解Java虚拟机》看到的,也有很多人是看文章看帖子看到的。现在网上搜到的帖子基本是照搬书里的描述,导致误导了大片大片的童鞋。

不是说周志明老师说得不对,而是表达得不够精确,导致出现了很多认知上的歧义。最近研究了下这块,写篇文章记录下我的研究结果。

我这边先抛个结论给大家:工作内存 = 虚拟机栈,对否?大家先想想。

volatile

不知道童鞋们有么有这样的疑问:

  1. 为什么需要volatile?
  2. volatile的出现解决了什么问题?

今天这篇文章主要讨论工作内存,为了搞清楚工作内存,所以需要了解volatile,更深入的理解将会在之后的文章中给大家分享,也请大家持续关注我的博客。

线程同步三大特性:原子性、可见性、有序性。volatile的出现是为了保证可见性、有序性以及单次读写的原子性。如果想保证代码段的原子性执行需用到synchronized。

那volatile是如何保证可见性的呢?

本质是读写volatile修饰的变量时会实时同步工作内存与主内存。所以我借助volatile关键字证明给大家看我的结论:工作内存=虚拟机栈 + 方法区(元空间)+ 堆区。

虚拟机栈是工作内存的一部分,这个我就不写代码证明了。

工作内存与方法区

国际惯例,先上代码

public class Test3 {
   

    public static boolean found = false;

    public static void main(String[] args)  {
   
        new Thread(new Runnable() {
   
            public void run() {
   
                System.out.println("等基友送笔来...");

                while (!found
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值