- 本文解释如何用核心 ASM API 生成和转换已编译的方法。首先介绍编译后的方法,然后介绍 用于生成和转换它们的相应 ASM 接口、组件和工具,并给出大量说明性示例。看 1 结构 在编译类的内部,方法的代码存储为一系列的字节码指令。 要生成和转换类,最根本的就是要了解这些指令,并理解它们是如何工作的。 本节将对这些指令进行全面概述,这些内容足以开始编写简单的类生成... 本文解释如何用核心 ASM API 生成和转换已编译的方法。首先介绍编译后的方法,然后介绍 用于生成和转换它们的相应 ASM 接口、组件和工具,并给出大量说明性示例。看 1 结构 在编译类的内部,方法的代码存储为一系列的字节码指令。 要生成和转换类,最根本的就是要了解这些指令,并理解它们是如何工作的。 本节将对这些指令进行全面概述,这些内容足以开始编写简单的类生成...
- IO 是主存和外部设备 ( 硬盘、各种移动终端及网络等 ) 拷贝数据的过程。IO 是操作系统的底层功能,通过 I/O 指令完成。网络编程领域的IO专指网络IO。 JDK 的 NIO NIO,即NEW IO,引入了多路选择器、Channel 和 Bytebuffer。 os为了保护自身稳定,会将内存空间划分为内核、用户空间。当需通过 TCP 发送数据时,在应用程序中实... IO 是主存和外部设备 ( 硬盘、各种移动终端及网络等 ) 拷贝数据的过程。IO 是操作系统的底层功能,通过 I/O 指令完成。网络编程领域的IO专指网络IO。 JDK 的 NIO NIO,即NEW IO,引入了多路选择器、Channel 和 Bytebuffer。 os为了保护自身稳定,会将内存空间划分为内核、用户空间。当需通过 TCP 发送数据时,在应用程序中实...
- 使用this.put(“String”, “String”)方法添加一个键值对。但是,它会覆盖现有值,而我想使用同一个键存储和配对多个值。 使用可以存储多个对象的ArrayList,当为HashMap分配一个值(例如,称为myHashMap)时,首先检查该键之前是否已使用过,如果尚未使用过,则可以创建一个具有要添加值的新ArrayList(如果有的话),则只需将值添加... 使用this.put(“String”, “String”)方法添加一个键值对。但是,它会覆盖现有值,而我想使用同一个键存储和配对多个值。 使用可以存储多个对象的ArrayList,当为HashMap分配一个值(例如,称为myHashMap)时,首先检查该键之前是否已使用过,如果尚未使用过,则可以创建一个具有要添加值的新ArrayList(如果有的话),则只需将值添加...
- Label label = new Label() 这个语句中,label的作用是为了条件跳转,其实也可以理解成字节码指令的参数。 所以label必须对应一条字节码指令,通过visitLabel(label)来调用,并且visitLabel的调用必须紧跟随着label对象指定的指令。 如例子中,第一个label指向goto后,所以顺序必须是:mv.visitJumpIn... Label label = new Label() 这个语句中,label的作用是为了条件跳转,其实也可以理解成字节码指令的参数。 所以label必须对应一条字节码指令,通过visitLabel(label)来调用,并且visitLabel的调用必须紧跟随着label对象指定的指令。 如例子中,第一个label指向goto后,所以顺序必须是:mv.visitJumpIn...
- 1 作用 接受参数并生成新值。与普通方法调用殊途同归。所有运算符都能根据自己的运算对象生成一个值。 1.1 副作用(Side Effect) 可改变运算对象的值。 1.2 最常见用途 修改自己的运算对象,从而产生副作用。注意生成的值亦可由没有副作用的运算符生成。 几乎所有运算符都只能操作基本类型(Primitives)。 唯一例外是 =、==&n... 1 作用 接受参数并生成新值。与普通方法调用殊途同归。所有运算符都能根据自己的运算对象生成一个值。 1.1 副作用(Side Effect) 可改变运算对象的值。 1.2 最常见用途 修改自己的运算对象,从而产生副作用。注意生成的值亦可由没有副作用的运算符生成。 几乎所有运算符都只能操作基本类型(Primitives)。 唯一例外是 =、==&n...
- 定义 为其他对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介的作用。 结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 主要解决 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。OOP系统中,有些对象由于某些原因(比如对象创建开销很大或某些操作需安全控制,或需进程外的访问),直接访... 定义 为其他对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介的作用。 结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 主要解决 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。OOP系统中,有些对象由于某些原因(比如对象创建开销很大或某些操作需安全控制,或需进程外的访问),直接访...
- class SendResponse(request: Request, val responseSend: Send, val responseAsString: Option[String], val onCompleteCallback: Option[Send => Unit]) extends Response(request) { ...... // ... class SendResponse(request: Request, val responseSend: Send, val responseAsString: Option[String], val onCompleteCallback: Option[Send => Unit]) extends Response(request) { ...... // ...
- 1 NIO Server端 1.1 多路复用开发一般步骤 //打开选择器 Selector selector = Selector.open(); //打开通到 ServerSocketChannel socketChannel = ServerSocketChannel.open(); //配置非阻塞模型 socketChannel.configureBlocki... 1 NIO Server端 1.1 多路复用开发一般步骤 //打开选择器 Selector selector = Selector.open(); //打开通到 ServerSocketChannel socketChannel = ServerSocketChannel.open(); //配置非阻塞模型 socketChannel.configureBlocki...
- 上篇我们分析了Java集合的总体类图,下面我们接着来具体探究一下相关的源码。 概要 Collection 简介 Collection 的定义 public interface Collection<E> extends Iterable<E>{} Collection是一个接口,是高度抽象的集合,其包含了集合的基本操作,如添加,删除... 上篇我们分析了Java集合的总体类图,下面我们接着来具体探究一下相关的源码。 概要 Collection 简介 Collection 的定义 public interface Collection<E> extends Iterable<E>{} Collection是一个接口,是高度抽象的集合,其包含了集合的基本操作,如添加,删除...
- 前言 上一篇我们介绍Java内存模型来处理有序性,可见性的问题。但是,还有一个原子性的问题,没有处理,那么针对原子性的问题我们该怎么处理呢?我们知道在并发编程中的原子性问题主要原因就是,一条高级语句可能会被分成多个CPU指令,在指令执行完之后发生了线程切换,中间状态被暴露造成原子性问题。 锁 现实生活中,我们用自己的锁来保护自己的财产,买门票来锁定演唱会的座位。 ... 前言 上一篇我们介绍Java内存模型来处理有序性,可见性的问题。但是,还有一个原子性的问题,没有处理,那么针对原子性的问题我们该怎么处理呢?我们知道在并发编程中的原子性问题主要原因就是,一条高级语句可能会被分成多个CPU指令,在指令执行完之后发生了线程切换,中间状态被暴露造成原子性问题。 锁 现实生活中,我们用自己的锁来保护自己的财产,买门票来锁定演唱会的座位。 ...
- 前言 前面几篇文章,我们学习了synchronized的相关知识,以及死锁的发生条件以及避免的方式,其中有一种破坏死锁的方式就是破坏不可抢占条件,通过synchronzied不能实现的,因为synchronized在申请资源的时候,如果申请不到就只能进入阻塞状态,啥都干不了,也不能中断。所以只能通过本期的主角lock 来处理。 lock 与synchronized ... 前言 前面几篇文章,我们学习了synchronized的相关知识,以及死锁的发生条件以及避免的方式,其中有一种破坏死锁的方式就是破坏不可抢占条件,通过synchronzied不能实现的,因为synchronized在申请资源的时候,如果申请不到就只能进入阻塞状态,啥都干不了,也不能中断。所以只能通过本期的主角lock 来处理。 lock 与synchronized ...
- 文章首发于:Java并发编程(四)— 死锁的发生与避免 前言 上一篇我们介绍了如何通过synchronized 来加锁保护资源。但是,不当的加锁方式可能就会导致死锁。 死锁发生的场景 最典型的就是哲学家问题, 场景:5个哲学家,5跟筷子,5盘意大利面,大家围绕桌子而坐,进行思考与进食活动。 哲学家的活动描述: 哲学家除了吃面、还要思考、所以要么放下左右手筷子进... 文章首发于:Java并发编程(四)— 死锁的发生与避免 前言 上一篇我们介绍了如何通过synchronized 来加锁保护资源。但是,不当的加锁方式可能就会导致死锁。 死锁发生的场景 最典型的就是哲学家问题, 场景:5个哲学家,5跟筷子,5盘意大利面,大家围绕桌子而坐,进行思考与进食活动。 哲学家的活动描述: 哲学家除了吃面、还要思考、所以要么放下左右手筷子进...
- 文章目录 JavaConfig@ComponentScan@Import@Conditional@ConfigurationProperties与@EnableConfigurationProperties组合注解总结 上一篇我们介绍了 Spring中Bean的生命周期,这一篇我们接着学习在Spring Boot中的一些常用注解。 JavaConfi... 文章目录 JavaConfig@ComponentScan@Import@Conditional@ConfigurationProperties与@EnableConfigurationProperties组合注解总结 上一篇我们介绍了 Spring中Bean的生命周期,这一篇我们接着学习在Spring Boot中的一些常用注解。 JavaConfi...
- 前言 今天来学习下与JVM垃圾收集机制相关的一些基本概念。 如何判断对象是否存活 垃圾收集器首要的任务的任务就是判断哪些对象是存活的,哪些对象已经死去了(这里死去的意思是对象不再被任何途径使用)。 引用计数算法 引用计数算法是在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能被使... 前言 今天来学习下与JVM垃圾收集机制相关的一些基本概念。 如何判断对象是否存活 垃圾收集器首要的任务的任务就是判断哪些对象是存活的,哪些对象已经死去了(这里死去的意思是对象不再被任何途径使用)。 引用计数算法 引用计数算法是在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能被使...
- 专栏系列文章 第二篇:原子类的说明与使用第三篇:Lock的学习与使用第四篇:走近CopyOnWriteArrayList第五篇:HashMap的源码分析第六篇:走近ConcurrentHashMap(JDK1.8)第七篇:ConcurrentHashMap(JDK1.8)扩容的详细介绍以及多线程测试第八篇:链表的学习:链表的头插法和尾插法第九篇:队列的学习,用数组和链... 专栏系列文章 第二篇:原子类的说明与使用第三篇:Lock的学习与使用第四篇:走近CopyOnWriteArrayList第五篇:HashMap的源码分析第六篇:走近ConcurrentHashMap(JDK1.8)第七篇:ConcurrentHashMap(JDK1.8)扩容的详细介绍以及多线程测试第八篇:链表的学习:链表的头插法和尾插法第九篇:队列的学习,用数组和链...
上滑加载中
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签