JVM

Java虚拟机,java程序的运行环境。

Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。

优点:
一次编译,到处运行
自动内存管理,垃圾回收功能
数组下标越界检查
多态(可扩展性)

程序计数器(寄存器)

  1. 作用:记住下一条jvm指令的执行地址

程序计数器(Program Counter Register):是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。

字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。程序的分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的命令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间的计数器互不影响,独立存储,我们程这块内存区域为“线程私有”的内存。

此区域是唯一 一个虚拟机规范中没有规定任何OutOfMemoryError 情况的区域。
2. 特点:

  • 是线程私有的
  • 不会存在内存溢出

运行一个java程序:

先将一个.java程序编译成一个.class文件,也就是二进制字节码文件,该文件人类是没办法读懂的,可以经过反编译将二进制字节码文件转换成我们可以看懂的

javap命令(对字节码的一种解析或者是对class文件进行反汇编)

javap -v XXX.class

解析的结果是对这段代码详细的执行流程,记录了程序运行的指令以及下一条指令的地址。