1.jdk/jre/jvm关系图如下:
jdk:开发工具包(包含java运行环境jre、工具编译器、调试器java/javac/jdb、基础类库java API等)--开发人员必备
jre:运行时环境(包含虚拟机jvm->bin、java核心类库->lib)--普通用户使用必备
jvm:虚拟机 运行.class文件 实现跨平台的核心部分 --普通用户使用必备
2.jdk1.8中内存区域划分的:
堆:是线程共享的内存区域。存放数组和对象的实例。是java垃圾收集器管理的主要区域,因此很多时候也称为GC堆。
方法区:也是各个线程共享的内存区域:用于存储已被虚拟机加载的类信息(版本、字段、方法、接口)、常量、静态变量。
虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息,每一个方法的调用直至完成的过程,就对应着一个栈帧在虚拟机栈中的入栈和出栈过程
本地方法栈:本地方法栈则是为虚拟机使用到的Native方法服务
程序计数器:字节码解释器工作时,通过改变这个计数器的值选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖该计数器。多线程中,为了让线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间互不影响、独立存储,因此这块是线程私有。
3.jmm内存模型:
指多线程并发时候,如何解决多线程之间的通信问题和如何解决线程操作 的原子性、可见性和有序性。
原文:https://www.cnblogs.com/liupeng0204/p/11642754.html