JVM内存模型和类加载

内存模型

JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。

堆中包含了字符串常量池。

程序计数器

记录线程执行的字节码的地址。

方法区

存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池(存放编译生成的字面量和符号引用)。
当类加载到内存后,JVM把类文件常量池中的内容存到运行时常量池。

虚拟机栈

管理Java函数的调用,线程私有的内存空间,保存方法的局部变量和返回地址等。

本地方法栈

管理C语言实现的本地方法的调用。

类加载

ClassLoader负责把编译器生成的class字节码文件加载到JVM中执行。

当加载Hello.class时,不考虑自定义类加载器,先按蓝色箭头向上,直到顶点后按红色箭头向下,如果没有任何加载器能加载则抛出ClassNotFoundException。
这种设计的好处:当有人篡改了String.java的实现,系统级别的类之前已经被BootstrapClassLoader加载过了,其他类加载器没有机会再去加载,防止危险代码的植入。

posted on 2023-07-15 15:21  王景迁  阅读(4)  评论(0编辑  收藏  举报

导航