java运行原理、静态代理和动态代理区分
1、java的编译和运行原理:
■ 编译:将源文件 .java 文件,通过编译器(javac 命令) 编译成 字节码文件 .class 文件。
■ 运行,通过类加载器(以二进制流形式)把字节码加载进JVM,通过java解析器(java 命令) 进行运行程序。
先将java源文件进行编译生成字节码文件,然后通过类加载器ClassLoader
(以二进制流形式
) 加载进虚拟机,然后通过java解析器或即使编译器进行运行。
文章图片
2、静态代理和动态代理:
■ 静态代理:(经历了编译
和运行)
在程序运行前就已经存在代理类的字节码文件(因为通过了编译阶段),代理对象和真实对象的关系在运行前就确定了(因为通过了编译阶段)。
■ 动态代理:(只经历了运行
,咱通过某种手段得到的字节码【遵循字节码格式和结构】)
动态代理类是在程序运行期间由jvm通过反射等机制动态生成的,所以不存在代理类的字节码文件(因为没有经历编译阶段),代理对象和真实对象的关系是在程序运行期间才确定的。
● 如何动态创建一份字节码?(实现了在代码中动态创建一个类的能力)
通过java的编译和运行原理,可以看到:在运行时期,是jvm通过字节码的二进制信息来加载类的。
【java运行原理、静态代理和动态代理区分】所以,当我们在运行时期,通过java编译系统组织.class文件的格式和结构,生成相应的二进制数据,然后再把这个二进制数据加载转换成对应的类。
推荐阅读
- Java学习之旅|【数据结构】 哈希表 详解
- 算法|JavaScript数据结构与算法 - 哈希表详解
- 数据结构与算法|【Java数据结构】哈希表详解
- Android|Android_Handler机制原理解析和源码分析
- 【数据库系统原理】数据库设计、表关系、多表查询
- java-23种设计模式概述【软件设计模式基本介绍(是什么、作用、优点)、模式的分类和介绍】
- Java泛型的那些事
- 「在|「在 Kubernetes 上运行 Pgpool-Il」实现 PostgreSQL 查询(读)负载均衡和连接池
- java版十大排序经典算法:完整代码(3)
- Java|Java Servlet响应httpServletResponse过程详解