java运行原理、静态代理和动态代理区分


1、java的编译和运行原理:

■ 编译:将源文件 .java 文件,通过编译器(javac 命令) 编译成 字节码文件 .class 文件。

■ 运行,通过类加载器(以二进制流形式)把字节码加载进JVM,通过java解析器(java 命令) 进行运行程序。

先将java源文件进行编译生成字节码文件,然后通过类加载器ClassLoader (以二进制流形式) 加载进虚拟机,然后通过java解析器或即使编译器进行运行。

image



2、静态代理和动态代理:

■ 静态代理:(经历了编译和运行)

在程序运行前就已经存在代理类的字节码文件(因为通过了编译阶段),代理对象和真实对象的关系在运行前就确定了(因为通过了编译阶段)。


■ 动态代理:(只经历了运行,咱通过某种手段得到的字节码【遵循字节码格式和结构】)

动态代理类是在程序运行期间由jvm通过反射等机制动态生成的,所以不存在代理类的字节码文件(因为没有经历编译阶段),代理对象和真实对象的关系是在程序运行期间才确定的


● 如何动态创建一份字节码?(实现了在代码中动态创建一个类的能力)

通过java的编译和运行原理,可以看到:在运行时期,是jvm通过字节码的二进制信息来加载类的

所以,当我们在运行时期,通过java编译系统组织.class文件的格式和结构,生成相应的二进制数据,然后再把这个二进制数据加载转换成对应的类


posted @   一乐乐  阅读(440)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示