Java字节码
编辑.java文件,生成字节码文件
javac TestCode.java
反编译字节码文件
javap -verbose TestCode.class
源代码中的各种变量,关键字和运算符号的语义最终都会编译成多条字节码命令。

关于字节码的类型对应如下:

对于数组类型,每一位使用一个前置的"["字符来描述,如定义一个java.lang.String[][]类型的维数组,将被记录为"[[Ljava/lang/String;"

虚拟机的主要任务是装载class文件(ClassLoader完成)并执行其中的字节码,在一个Java虚拟机中有可能存在多个类加载器。
当JAVA虚拟机运行一个程序时,相关信息被组织到“运行时数据区”。
- 方法区
方法区用来存储解析被加载的class文件的相关信息。
- 堆
当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。
- PC寄存器
PC寄存器主要用来存储线程。当新创建一个线程时,该线程都将得到一个自己的PC寄存器(程序计数器)以及一个java栈。
- 栈区
Java栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态,当线程调用一个方法时,虚拟机压入一个新的栈帧到该线程的Java栈中,当该方法返回时,这个栈帧从Java栈中弹出。
网友评论