JVM
问:什么是java虚拟机?为什么java被称作是平台无关的编程语言?
答:Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
JVM 内存结构
问:堆、栈、方法区、直接内存、运行时常量池?
答:所有的对象实例和数组都要在堆上分配;堆的主要作用就是用来分配给对象生存的空间。方法区是各个线程共享的内存区域,用于存储被虚拟机加载的类信息,常量,静态常量,即时编译器编译后的代码,运行时常量池。在HotSpot上也被称为“永久代”。这一区域主要的知识点是类加载的过程,这一过程分为五个阶段,分别是加载,验证,准备,解析,初始化。虚拟机栈是描述java方法执行的内在模型。
栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素,栈帧包括:局部变量表,操作数栈,动态链接(每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用),方法出口方法区等。
运行时常量池(Runtime Constant Pool),它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量