Java虚拟机(Java virtualmachine)实现了Java语言最重要的特征:即平台无关性。平台无关性原理:编译后的 Java程序(.class文件)由 JVM执行。JVM屏蔽了与具体平台相关的信息,使程序可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。因此实现Java平台无关性。

类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息会存放于一块称之为方法区的内存空间。除了类的信息外,方法区还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)

Java堆在Java虚拟机启动的时候创立,它是Java程序最主要的内存工作区域。几乎所有的Java对象实例都存放在Java堆中。堆空间是所有线程共享的,这是一块与Java应用密切相关的区间。

JVM栈(Java Virtual MachineStacks)(1)JVM栈是线程私有的,并且生命周期与线程相同。并且当线程运行完毕后,相应内存也就被自动回收。(2)栈里面存放的元素叫栈帧,每个方法从调用到执行结束,其实是对应一个栈帧的入栈和出栈。栈帧用于存储执行方法时的一些数据,如局部变量表、操作数栈(执行引擎计算时需要),方法出口等等。(3)这个区域可能有两种异常:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常(如:将一个函数反复递归自己,最终会出现这种异常)。如果JVM栈可以动态扩展(大部分JVM是可以的),当扩展时无法申请到足够内存则抛出OutOfMemoryError异常。

查看原文 >>
相关文章