导图社区 JVM(java虚拟机)
干货分享!本思维导图主要内容为:JVM(java虚拟机)内存模型,涉及jvm类加载、jvm内存结构分析和GC的分析,较为系统地梳理了JVM(java虚拟机)的相关知识要点。如有误,欢迎指出,一起学习,共同进步!
社区模板帮助中心,点此进入>>
JDK
JVM
启动类加载器 Bootstrap ClassLoader
扩展类加载器 Extension ClassLoader
System.out.println(System.getProperty("java.ext.dirs"));
应用程序类加载器 Application ClassLoader
注意1: 如果应用程序中没有自定义过自己的类加载器, 一般情况下这个就是程序中默认的类加载器。
注意2:System.out.println(System.getProperty("java.class.path"))
注意3:一般应用程序类加载器被设置为上下文类加载器
注意4:3打破双亲委派机制,这个机制可以满足当我们的classpath是在运行时才确定,并由定制的 classloader加载的时候,由system classloader(即在jvm classpath中)加载的class可以通过context classloader获得定制的classloader并加载入特定的class(通常是抽象类和接口,定制的classloader中是其实现),例如web应用中的servlet就是用这种机制加载的.
本地方法
负责加载 JAVA_HOME\lib 目录下的类
可通过Xbootclasspath指定附加加载路径
可通过java.ext.dirs系统变量指定路径中的类库
负责加载用户路径(classpath)上的类库。
方法区
加载
1.在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注释:.class 文件可来自网络,jar,war中读取
注释:该阶段可以自己定义类加载器实现,其余阶段都是jvm主导。
java栈
验证
2.确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
java堆
准备
3.在方法区中,为类变量(静态变量)分配内存,并设置默认初始化值,注释:例如 public static int v = 8080; 初始值为0,8080是在初始化阶段赋值。
类加载器
解析
4.解析阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程
内存
初始化
5.初始阶段,才开始真正执行类中定义的Java程序代码
带解读
JRE
使用
编译、运行等开发工具(除jre的其他目录)
卸载
JAVA系统类库
链接
用户自定义类加载器