首页 > 试题广场 >

简述Java内存模型?

别把jmm与jvm运行时内存搞混了

发表于 2019-07-22 20:07:55 回复(0)
你确定这是java内存模型???  Java内存模型是JMM,线程之间的主内存和本地内存那些啊!!!
发表于 2019-06-18 19:23:00 回复(0)
Java内存模型简称JMM,本身是一个抽象概念并不真实存在,描述的是一种规范,通过这组规范定义了程序中各个变量的访问方式。规定所有变量都存储在主内存中,主内存是共享内存区域,所有线程都可以访问,但是线程对变量的操作(比如读取赋值)必须在工作内存中进行。首先要将变量从主内存中拷贝到自己的工作内存中,然后再对变量进行操作,操作完成后写回主内存,不能直接操作主内存中的变量。工作内存是每个线程的私有区域,不同线程无法访问对方的工作内存,线程之间的通信要通过主内存完成。
发表于 2020-02-07 20:19:49 回复(0)
Java内存模型主要包括以下几部分:
  1. 程序计数器:这是一块占用内存很小的空间,也是在JVM中唯一不存在OutofMemoryError的地方,线程不共享,用于存放当前线程执行字节码指令的地址
  2. 本地方法栈:用于登记要执行的本地方法,即是用于native修饰的方法,该方法的实现可以由非Java语言来实现,比如C,C++等,线程不共享
  3. Java虚拟机栈:是在线程创建时创建,它的生命周期跟随线程的生命周期,线程结束栈内存也被释放,主要的保存单元是栈帧,栈帧包含了局部变量表,动态链接,方法出口,操作数等,线程不共享
  4. Java堆:创建对象存储的地方,堆内存采用分代垃圾收集管理,主要分为新生代,老年代和永久代,是GC执行的地方法,新生代中又分为伊甸园,幸存区(Form区,To区),注意的是在JDK8之后,永久代没有,由元空间来替代,元空间只是逻辑上属于Java堆,线程共享
  5. 方法区:用来存储被Java虚拟机加载的类信息,常量,静态变量,运行时常量池等,线程共享,永久代和方法区是两个不同的概念,永久代可以说是方法区的实现,目的是为了能用GC来对方法区进行管理里,避免再次专门为方法区编写内存管理的代码

发表于 2019-06-01 23:23:54 回复(1)
1、堆,存放所有new出来的对象
2、栈,存放引用数据类型的地址,以及所有的基本数据类型
3、常量池:存放常量
4、静态域:静态资源
5,寄存器:存取速度最快,由系统掌握,我们无法使用

编辑于 2019-10-21 11:25:05 回复(0)
Java内存模型指的是JMM吧
发表于 2019-07-09 13:33:13 回复(0)

Javs内存模型和jvm内存模型一样吗???


发表于 2019-06-12 13:22:39 回复(0)
Java内存模型 :
程序计数器,是一个数据结构,用于保存当前正在执行的程序的内存地址,Java虚拟机的多线程就是
通过线程轮流切换并分配处理器来实现的,为了线程切换后能恢复到正确的位置,每个线程都需要一个
独立的程序计数器,互补影响。该区域为线程私有。
Java虚拟机栈,线程私有,与线程生命周期相同,,用于存储局部变量表,
本地方法栈:
Java堆:所有的线程共享的一块内内存区,实例对象都在这里分配。
方法区:各个线程共享的区域,存储虚拟加载的类信息,编译后的代码。
运行时常量池:代表运行时每个clas文件中的常量表,包括几种常量,变异时数字常量和方法或者与域的


发表于 2019-06-09 10:48:47 回复(0)