1、java技术体系:主要五类如下
java语言
各种硬件平台上的java虚拟机
class文件格式
java API类库
第三方java类库
java card
JAVA ME(J2ME)
JAVA SE(standard edition)
JAVA EE(enterprise edition)
java语言,java虚拟机,java API类库:不准确的统称为JDK(java development kit):支持java程序开发的最小环境
java虚拟机,java API类库:不准确的统称JRE(java runtime environment):JAVA运行的标准环境
2、运行时数据区域
方法区,堆 : 由所有线程共享的
虚拟机栈,本地方法栈,程序计数器:线程隔离的数据区
程序计数器:由于java虚拟机的多线程轮流切换并分配处理器时间的方式来实现的,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器(线程 私有的内存)
虚拟机栈:java虚拟机栈也是线程私有的,它的生命周期与线程相同,虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中的从入栈到出栈的过程。
局部变量表:存放了编译期可知的各种基本数据类型、对象引用和returnAddress类型(指向了一条字节码指令的地址)。
两种异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,抛StackOverFlowError
如果虚拟机栈可以动态扩展,当扩展到无法申请到足够的内存时会抛OutOfMemoryError
本地方法栈:与虚拟机栈类似,为虚拟机使用到的native方法服务。
java堆:堆是java虚拟机所管理的内存最大的一块,所有线程共享,在虚拟机启动时创建,用于存放对象实例(所有对象的实例以及数组都放在这里)。堆是垃圾收集器主要管 理的区域
方法区:线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据