
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程开发语言是目前大多数程序员都在学习的编程语言之一,而今天我们就一起来了解一下,java编程内存模型与运行时数据区类型。
1、JVM内存模型
JVM内存模型–Java虚拟机规范定义Java内存模型,尝试屏蔽掉各种硬件和操作系统的访问差异;–JVM内存模型的目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出来这样的细节;–volatile关键字:当一个变量用volatile关键字限定后,会有两个语义:(1)当这个变量的值被修改后,会立即刷新到主内存中,对其他线程可见;当某个线程读取这个变量的时候,也会重新将主内存中的数据刷一份到工作内存中来。
但是,如果多线程操作这个变量的计算中,后一个值依赖前一个值,就还是会有并发问题,说明volatile不具备原子性;(2)禁止指令重排优化,观察voatile变量对应的字节码文件,会发现变量的操作指令后面加了一句lockaddl$0x0,(%esp)的操作,这个操作相当于一个内存屏障。
–synchronized关键字:当一个线程对一个变量加锁的时候,就会清空这个变量在当前工作内存中的值,因此该关键字同时满足了可见性和原子性。
2、Java运行时数据区
Java虚拟机运行时数据区–程序计数器(PC):Java线程私有,类似于操作系统里的PC计数器,用于指定下一条需要执行的字节码的地址;–Java虚拟机栈:Java线程私有,虚拟机展描述的是Java方法执行的内存模型:每个方法在执行的时候,都会创建一个栈帧用于存储局部变量、操作数、动态链接、方法出口等信息;每个方法调用都意味着一个栈帧在虚拟机栈中入栈到出栈的过程;
–本地方法栈:和Java虚拟机栈的作用类似,区别是该该区域为JVM调用到的本地方法服务;–堆(Heap):所有线程共享的一块区域,垃圾收集器管理的主要区域。
目前主要的垃圾回收算法都是分代收集,因此该区域还可以细分为如下区域:–年轻代–Eden空间–FromSurvivor空间1,FromSurvivor空间2,用于存储在Younggc过程中幸存的对象;
–老年代–方法区:各个线程共享的一个区域,用于存储虚拟机加载的类信息、常量、静态变量等信息;–运行时常量池:方法区的一部分,用于存放编译器生成的各种字面量和符号引用;
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。