看图了解JVM
JVM使用的区域由两大部分组成:
单个线程独立的区域
多个线程公共的区域
公共区域又包含两部分:
相对静态的区域(永久代),包含常量、方法、属性、代码等
相对动态的区域(堆),包含创建的对象
线程独立区域可以理解为线程在执行代码时的上下文,会从公共区域读取数据,也会保存数据到其中的堆
通常的执行过程:
当线程需要一个类时,使用加载器将字节码加载到方法区,然后会依照被加载的代码执行。执行类的方法前,会在栈中新建一个栈帧,作为上下文来执行方法。执行过程中可能从常量池、堆中读取需要的数据,执行完毕后数据可能同步到前一个方法的栈帧,也可能同步到堆。
更抽象的概括JVM所使用的区域:
执行的依据(位于永久代的类、方法、常量信息),数据本身(位于堆的对象),执行过程中的上下文(每个线程执行时的临时部分)
