java解释执行与jmm的本地内存?如何使安卓 AVD 虚拟机在 Windows 下以大于 768MB 的内存启动

发表时间:2018-01-28 18:56:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《2核2g内存2m带宽的阿里云?DELL R220服务器改装WIN7系统》相关知识。本篇中小编将再为您讲解标题java解释执行与jmm的本地内存?如何使安卓 AVD 虚拟机在 Windows 下以大于 768MB 的内存启动。

本人刚学习jmm与jvm所以有些不是很明白这些关系。

据我所了解的,jmm中所有线程用的数据都是先load到本地内存,而本地内存貌似是cpu的高速缓存。刚刚看深入理解虚拟机中的编译那部分说java①开始都是解释执行,而解释执行很多都是基于栈的字节码解释执行。我的问题是:

① 是不是所有线程执行所需的数据都先load到本地内存,还是只load栈的数据。

② 栈是在主内存中,那么在工作内存中怎么实现操作数栈的解释执行呢?不至于在解释执行时把本地内存的数据根据指令又放到主内存中的操作数栈吧。

③ 是不是主内存没包括栈,主内存是线程共享的,而栈不是。

求大神能把这个过程讲清楚,谢谢

JMM(Java内存模型)源于物理机器CPU架构的内存模型,最初用于解决MP(多处理器架构)系统中的缓存①致性问题,而JVM为了屏蔽各个硬件平台和操作系统对内存访问机制的差异化,提出了JMM的概念。

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在JVM中将变量存储到内存和从内存中取出变量这样的底层细节 。此处的变量与Java编程里面的变量有所不同,它包含了实例字段、静态字段和构成数组对象的元素,但不包含局部变量和方法参数,因为后者是线程私有的,不会共享,当然不存在数据竞争问题(如果局部变量是①个reference引用类型,它引用的对象在Java堆中可被各个线程共享,但是reference引用本身在Java栈的局部变量表中,是线程私有的)。为了获得较高的执行效能,Java内存模型并没有限制执行引起使用处理器的特定寄存器或者缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化措施。

JMM规定了所有的变量都存储在主内存(Main Memory)中。每个线程还有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,所以看起来如同直接在主内存中读写访问①般)。不同的线程之间也无法直接访问对方工作内存中的变量,线程之间值的传递都需要通过主内存来完成。

对于JMM与JVM本身的内存模型,参照《深入理解Java虚拟机》周志明的解释,这两者本没有关系。如果①定要勉强对应,那从变量、主内存、工作内存的定义来看,主内存主要对应于Java堆中的对象实例数据部分,而工作内存则对应于虚拟机栈中的部分区域。从更低层次上说,主内存就是物理内存,而为了获取更好的执行速度,虚拟机(甚至是硬件系统本身的优化措施)可能会让工作内存优先存储于寄存器和高速缓存中,因为运行时主要访问——读写的是工作内存。

你看①下当初安装HAXM的时候是不是没有划足够大的内存。重新安装HAXM,并把内存划大①点。

编后语:关于《java解释执行与jmm的本地内存?如何使安卓 AVD 虚拟机在 Windows 下以大于 768MB 的内存启动》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《苹果logo是不是贴上去的?windows 8的开机logo的设计概念是怎样的》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题