Java虚拟机(第二版) 学习笔记

Java技术体系

  • sun官方所定义的Java技术体系包括:1、Java程序设计语言 2、各种硬件平台上的Java虚拟机 3、Class文件格式 4、Java API类库  5、来自商业机构和开源社区的第三方Java类库
  • 我们可以把Java程序设计语言,Java虚拟机,Java API 类库这三个部分统称为JDK,JDK是用于支持Java程序开发的最小环境
  • Java API类库中的Java SE API子集和Java虚拟机这两个部分统称为JRE(Java Runtime Environment)

Java内存区域与内存溢出异常

  • 运行时数据区域:

程序计数器

  • 程序计数器一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器的工作就是通过改变这个计数器的值来选取下一个要执行的指令,分支,循环,跳转,异常处理,线程恢复等基本功能。程序计数器是线程私有的。

Java虚拟机栈

  • Java虚拟机栈也是线程私有的,它的生命周期和线程相同。每个方法执行的同时,都会创建一个虚拟机栈用来栈帧(Stack Frame)用来存储局部变量表,操作数栈,动态链接,方法出入口等信息。每一个方法的调用到执行完成,对应了一个栈帧在虚拟机栈中的入栈到出栈的过程。
  • 局部变量表:存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double),以及一些对象引用(非对象本身)
  • 其中64位的long和double会占2个局部变量空间,其他的都占一个
  • Java虚拟机的规范中,针对这个区域有规定了两个异常。1、如果线程请求的栈深度大于虚拟机栈允许的深度,将抛出StackOverflowError. 2、如果虚拟机栈可以动态扩展,但是又无法申请到足够的内存,就会抛出OutOfMemoryError。

猜你喜欢

转载自www.cnblogs.com/luliangliang/p/9122800.html