跨平台
java源代码文件被编译为.class文件,.class文件交由JVM解析运行。
JVM运行在操作系统上,JDK区分操作系统,只要本地系统装了JDK,该JDK就和当前操作系统兼容。
.class字节码运行在JVM上,不关心操作系统,因此实现了Java语言的跨平台。
内存管理
jvm运行时数据分区:
- 堆:存放对象实例和数组
- 虚拟机栈:描述java方法执行的内存结构,每个方法被执行时都创建一个栈帧,存储局部变量表、操作栈、动态链接、方法出口等
- 本地方法栈:为虚拟机使用的native方法服务
- 方法区:存储已被虚拟机加载的类元数据信息,类信息、常量、静态变量、即时编译后的代码。
- 程序计数器:当前线程所执行的字节码的行号指示器。
其中线程私有的:虚拟机栈、本地方法栈、程序计数器。
线程共享的:堆和方法区。
关于方法执行时创建的栈帧,其中有:
1.局部变量表:存储方法参数和内部定义的局部变量
2.操作数栈
3.返回地址
4.动态链接
5.指向运行时常量池的引用
参考:深入理解Java虚拟机