主要区别,java内存结构是对内存的具体划分,java内存模型是解决多线程下工作线程和主线程数据不一致问题而提出的抽象规则。
java内存结构简单划分如下图所示,以下结构是java8之前版本,在java8里元空间取代了之前版本的方法区
可以看到java内存主要划分线程共享(堆、方法区),线程私有(程序计数器、虚拟机栈、本地方法栈),以下就这几个内存区域进行说明
程序计数器
Java虚拟机栈
本地方法栈
Java虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈为虚拟机使用Native方法服务,可能底层调用的c或者c++
堆
Java虚拟机管理内存最大的一块内存区域,虚拟机启动时创建,唯一目的存放对象实例,几乎所有对象实例及数组都在这里分配,因为JIT编译器发展和逃逸分析技术的成熟导致并不是所有对象都在堆中
方法区
运行时常量池
直接内存