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

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

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

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

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

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

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

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

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

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

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

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

java运行原理、静态代理和动态代理区分的更多相关文章

  1. java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总

    若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. ...

  2. java静态代理与动态代理简单分析

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...

  3. Java静态代理和动态代理

    今天介绍一下代理设计模式,在业务场景中使用代理模式的好处有很多,包括什么权限校验,事务管理等等,具体有什么好处大家自动百度吧,我这里只解释代理模式的设计原理.首先这个设计模式出来的时候先是静态代理模式 ...

  4. Java静态代理与动态代理模式的实现

    前言:    在现实生活中,考虑以下的场景:小王打算要去租房,他相中了一个房子,准备去找房东洽谈相关事宜.但是房东他很忙,平时上班没时间,总找不到时间去找他,他也没办法.后来,房东想了一个办法,他找到 ...

  5. java之静态代理和动态代理

    我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识.1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是J ...

  6. 代理模式(静态代理、JDK动态代理原理分析、CGLIB动态代理)

    代理模式 代理模式是设计模式之一,为一个对象提供一个替身或者占位符以控制对这个对象的访问,它给目标对象提供一个代理对象,由代理对象控制对目标对象的访问. 那么为什么要使用代理模式呢? 1.隔离,客户端 ...

  7. java:java静态代理与动态代理简单分析

    java静态代理与动态代理简单分析 转载自:http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动 ...

  8. Java代理模式精讲之静态代理,动态代理,CGLib代理

    代理(Proxy)是一种设计模式,通俗的讲就是通过别人达到自己不可告人的目的(玩笑). 如图: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象 这三个代理模式,就 ...

  9. java 代理模式-静态代理与动态代理

    最近在研究SpringAOP,当然要学习AOP就要知道这么健硕.强大的功能的背后究竟隐藏着怎样不可告人的“秘密”?? 接下来就是查阅了许多资料详细的研究了一下Java的代理模式,感觉还是非常非常重要的 ...

随机推荐

  1. AVD模拟器怎么配置上网

    转自:http://blog.csdn.net/you_jinjin/article/details/7228303 方法一 首先,Windows下,配置Adroid环境变量(Win7为例) 1.桌面 ...

  2. 【reverse】逆向6 JCC

    [reverse]逆向6 JCC 前言 我们之前学习的时候讲了,eip寄存器存储的是当前(即将执行的语句的) 指向地址 而我们之前提到的下断点(F2),就和我们编程中的下断点一样,执行到某句汇编指令然 ...

  3. [JavaWeb]反序列化分析(二)--CommonCollections1

    反序列化分析(二)--CommonCollections1 链子分析 首先新建一个TransformedMap,其中二三参数为可控,后续要用到 当TransformedMap执行put方法时,会分别执 ...

  4. golang中的标准库context解读

    简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + se ...

  5. gorm创建记录及设置字段默认值

    package main import ( "database/sql" "gorm.io/driver/mysql" "gorm.io/gorm&q ...

  6. cp 不提示按y

    yes|cp index.html.j2   yml -rf \cp index.html.j2   yml/ 两个效果是一样的

  7. setcontext+orw

    setcontext+orw 大致可以把2.27,2.29做为两个分界点. 我们先来讨论 2.27 及以下的 setcontext + orw 的写法. 首先 setcontext 是什么?了解过 S ...

  8. python网络爬虫-入门(二)

    为什么要学网络爬虫 可以替代人工从网页中找到数据并复制粘贴到excel中,这种重复性的工作不仅浪费时间还一不留神还会出错----解决无法自动化和无法实时获取数据     对于这些公开数据的应用价值,我 ...

  9. FreeSWITCH 对接RTSP和RTMP视频

    在某些场景需要把摄像头或者其它推流视频加入FreeSWITCH.因此可以采用如下方式处理: 安装mod_vlc 然后在配置文件中加入 < action applicaiton="pla ...

  10. 为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

    CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ...