![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java高级210630
houtianrui
这个作者很懒,什么都没留下…
展开
-
2 jvm内存模型
jvm虚拟机=运行时数据区+类装载子系统+字节码执行引擎 运行时数据区=堆+栈+本地方法栈+方法区+程序计数区 线程的内存空间栈,这里的栈与数据栈是一样的设计结构 这里和程序的运行顺序是一样的,程序在执行时是从最里面先执行然后到最开始的逻辑 main方法先运行,先压栈道底部,后面的接着往上压,执行的时候,先从上面开始执行到底部 栈:线程独有,每个线程一个 栈帧:方法独有, 每个方法对于一个栈帧 栈帧:局部变量表,操作数栈,动态链接,方法出口 操作数栈是方法里面执行数据操作的内存 程序计算器原创 2021-07-18 11:29:39 · 81 阅读 · 0 评论 -
双亲委派机制 +全盘委托机制+自定义类加载器+打破双亲
launcher 单例创建 launcher 创建了URlClassloader 通过路径去实现类的加载 launcher 创建了extClassloader他的parent是null,这里是C++创建的引导类加载器 ,这个类继承的是URlClassloader,是扩展类加载器 launcher 创建了AppClassloader 他的parent是Exlclassloader,是应用程序加载器 自定义类加载器 先从应用程序加载器中查找是否有加载到,没有就从父类extclassloader类扩.原创 2021-07-17 17:00:08 · 414 阅读 · 0 评论 -
loadClass的类加载过程
loadClass的类加载过程有:加载-验证-准备-解析-初始化-使用-卸载 加载:在硬盘上查找并通过io读入字节码文件,使用到类时才有加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.calss对象,作为方法区这个类的各种数据的访问入口 验证:校验字节码文件的正确性 准备:给类的静态变量分配内存,并赋予默认值 ,例如命令: javap -v test.可以查看字节码的信息 解析:将符合引用替换为直接引用,该阶段会把一些静态方法如ma..原创 2021-07-01 20:07:47 · 407 阅读 · 0 评论 -
1 类加载器初始化及加载类的过程
Java com.test.class 在Windows系统下 java.exe调用底层的jvm.dll文件创建java虚拟机(C++实现) 创建一个引导类加载器实例(C++实现) c++调用java代码创建jvm启动器实例sun.misc.Launcher,该类由引导类加载器负责加载创建其他类加载器 sun.misc.Launcher.getLauncher()获取运行类自己的加载器ClassLoader,是AppClassLoader的实例 Launcher.getClassLoader(),原创 2021-06-30 22:54:55 · 117 阅读 · 0 评论