Contents
  1. 1. 什么是jvm(java虚拟机)?
  2. 2. 为什么java被称为与平台无关的语言?
  3. 3. 什么是平台?
  4. 4. 什么是跨平台?
  5. 5. jvm内存管理

什么是jvm(java虚拟机)?

java 虚拟机是可以执行字节码(.class)文件的虚拟机进程。

为什么java被称为与平台无关的语言?

因为不同的平台装有不同的jvm,它们能够将相同的.class文件解释成不同平台所需要的机器码。正因为有jvm的存在,java被称为跨平台的编程语言。

什么是平台?

CPU和操作系统的总称。

cpu进行计算和控制计算机系统;操作系统:管理计算机硬件和软件资源的系统软件,为计算机提供公共服务。

什么是跨平台?

平台无关,不是说源程序(.java)和平台无关,能运行在各个不同的平台;而是说 源程序编译后的.class文件能够在不同的平台上运行(只要不同的平台上安装jvm)

java源程序不是直接编译成机器码,而是二次编译的。第一次对java源程序被javac编译成.class文件(这个文件与平台无关)。第二次.class文件在被jvm中的解释器编译,解释器为不同平台所需要的机器码。

javac和jvm都包含在jdk(java developement toolkit)

jvm内存管理

jvm运行时的几大数据区:

img

方法区,堆,java栈,pc寄存器,本地方法栈。

堆:存放所有new 对象。堆占据JVM的大部分内存。因此也是java的GC,垃圾收集器的主要工作目标区域。

方法区:存放类装载进来后的和这个类相关的所有运行时需要的信息(如类的静态变量,常量,类的全局名称,方法信息等)。线程共享区,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据。

运行时常量池:方法区的一部分,用于存放编译器生成的各种字面量和符号引用。

栈:用于存放基本类型,对象、数组的引用。

栈内存中存放的可以看做是运行时的临时数据,主要表现为本地变量,操作符,对象引用地址等。这些数据会在方法执行结束后立即会回收,不会驻留。对存储空间的占用也只是执行函数指令时所必须的空间。不会造成内存的瓶颈。而方法区中的对象对应的类信息,函数表,构造函数,静态常量等。这些信息在类加载时按需只会在方法区中存储一份,不会产生额外的存储空间。所以主要的内存消耗是java堆内存。

Contents
  1. 1. 什么是jvm(java虚拟机)?
  2. 2. 为什么java被称为与平台无关的语言?
  3. 3. 什么是平台?
  4. 4. 什么是跨平台?
  5. 5. jvm内存管理