字节码工程库具有ConstantDynamic特性,也可以被称为condy特性,和Java11的Nestmates。字节码工程库Byte Buddy支持Java 11以及自Java 8以来引入的所有类文件和节码工程库新特性。最近采访了ByteBuddy的作者Rafael Winterhalter,让我们来了解一下ByteBuddy字节码工程库吧。

Byte Buddy

Rafael Winterhalter:Byte Buddy是一个代码生成库,通过简单的Java API定义新类或修改现有类。这个字节码工程库会生成并操作Java字节码。通过处理节码工程库,它可以与使用任何JVM语言编写的代码进行交互,节码工程库,并且可以在Java应用程序的运行期间使用该字节码工程库来修改当前要执行的代码,甚至包括自己的代码。

为什么Java 11将ConstantDynamic作为一项新特性发布

ava开发人员通常使用static final关键字来定义常量。字节码工程库,不过,Java类文件中的常量可以是通过符号引用的非类字段。节码工程库,有几种类型已经通过这些符号来表示字面量,例如Java字符串。

有了ConstantDynamic,节码工程库,就可以将任意变量表示为常量池中引用的常量值。字节码工程库,使用类文件常量的主要好处是只在第一次使用时才创建,节码工程库,而不是在类加载时创建,而static final字段是在类加载时创建的。使用ConstantDynamic,将来可以避免在JVM中进行大量的加载。字节码工程库,例如,在JVM启动时,节码工程库,它必须初始化Locale类,而这个类引用了JVM支持的所有语言。这种初始化相当昂贵并且通常是不必要的,因为大多数程序只使用默认语言。字节码工程库,通过使用ConstantDyanmic,节码工程库,未来可以改进核心库,实现更快的JVM启动,当然其他库也可以做类似的事情。

字节码工程库Byte Buddy的功能

字节码工程库Byte Buddy主要被用在其他库和框架中。节码工程库,例如,Hibernate使用Byte Buddy来实现实体代理,Mockito使用它来生成模拟类。节码工程库,Byte Buddy也渐渐被用于开发可以改变整个应用程序行为的Java代理。APM工具(例如Instana)正在使用这类代理收集应用程序运行期间的度量指标。节码工程库,2014年开始开发Byte Buddy,第一个非beta版本出现后,就受到大量人的关注,每年具有一亿次的下载量。

最新添加了什么特性

在最新的版本中,字节码工程库,我一直在尝试支持Java 11和12。不过我的大部分时间都用于添加对Java模块系统的支持,这是一条漫漫长路。随着最新版本的发布,对模块系统的支持变得更加稳定,节码工程库,Byte Buddy甚至会在即将发布的1.9.0版本中添加一个module-info.class。字节码工程库,同时,这个库保留了对Java 6、7和8的兼容性。

用户特别要求的新特性有哪些

因为缺乏对新版本的支持通常会影响项目在较新的VM上编译。节码工程库,类似地,还有很多特性请求要求支持Kotlin或Scala等JVM语言,这些语言在字节码转换方面有一些特别之处。节码工程库,假如Java语言正在添加新特性,通过扩展JVM的功能来实现,节码工程库,这个时候要小心,否则Byte Buddy会出现问题。

开发人员怎么使用

要想使用这个字节码工程库,只需将它添加到项目中,节码工程库,然后使用它的DSL生成类。Byte Buddy的GitHub页面和官网都提供了如何创建简单类的示例。节码工程库,网页上还提供了综合性文档,还有很多博客文章、YouTube和Vimeo上的视频资料。

目前路线图中即将推出的特性有何看法?

目前,几乎所有即将推出的Java特性都让我兴奋不已。字节码工程库,我最期待的是Loom,它将提供对JVM continuation的原生支持。节码工程库,作为一名软件顾问,我参与的项目通常使用actor模型或反应式回调之类的抽象来实现并发。字节码工程库,这些应用程序通常会越变越复杂,业务逻辑被埋没在模拟并发性的仪式代码中。节码工程库,满足了技术的需求忽略领域逻辑,导致业务代码难以重构。

Java 8以来类文件格式是否有其他重大变化?ByteBuddy如何应对这些变化?

除了ConstantDynamic之外,JVM还引入了嵌套伴侣(nest mate)的概念,将它们定义为嵌套伴侣,就可以提供更好的方法访问控制,节码工程库,这样既有获得调用对方私有方法的权限。javac编译器通过添加package-private访问器方法来实现嵌套类的私有方法调用。字节码工程库,Byte Buddy支持嵌套伴侣,但目前DSL不允许更改或添加嵌套伴侣。节码工程库,这是一个比较大的特性,我想在今年晚些时候解决这个问题。

你有其他意见或想法想与我们的读者分享的吗?

一部分Java开发人员对甲骨文的管理持怀疑态度,他们觉得模块系统或新发布周期对甲骨文来说可能意味着更大的负担而不是好处。字节码工程库,我认为甲骨文最终解决了很多可能危及平台长期发展的问题。JVM现在处在一个更好的状态,很多即将发生的变化都是基于这个基础。

byte buddy学习笔记相关推荐

  1. 探针技术-JavaAgent 和字节码增强技术-Byte Buddy

    能够基于Java Agent编写出普通类的代理 理解Byte Buddy的作用 能够基于Byte Buddy编写动态代理 1 Byte Buddy Byte Buddy 是一个代码生成和操作库,用于在 ...

  2. A Byte of Python3 学习笔记

    A Byte of Python3 学习笔记 第七章 控制流 1.if语句(带输入函数) 2.while语句 3.for循环 4.break.continue.return的区别 第八章 函数 8.1 ...

  3. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  4. jdk7新特性学习笔记

    jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...

  5. ci mysql 事务_MySQL事务-学习笔记

    MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...

  6. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  7. 游戏数据的捕捉(郁金香学习笔记)

    目录: 1.得到角色对象属性 2.得到吃药的CALL 3.得到快捷键CALL 4.得到选中怪物的ID地址 5.得到怪物列表 6.得到怪物属性 7.得到显示血条CALL 8.得到普通攻击CALL 9.得 ...

  8. ElasticSearch 6.x 学习笔记:12.字段类型

    ElasticSearch 6.x 学习笔记:12.字段类型 欢迎转载. https://blog.csdn.net/chengyuqiang/article/details/79048800 12. ...

  9. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...

最新文章

  1. redis 缓存过期默认时间_缓存的必知必会:一文搞懂Redis持久化和过期机制
  2. 全新算法助机器学习抵抗干扰
  3. android LaunchMode之SingleTask
  4. linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
  5. 对于java的命名规范(标识符)
  6. 【每日算法】C语言8大经典排序算法(2)
  7. 代码阅读 | torch.sort函数
  8. java技术简介英文_Java技术常见的英文缩写
  9. SkyEye卫星篇:从无到有的国之“芯”
  10. 郑大中科院合作计算机系,郑大一本今年在河南招4320人 本科新增5个专业
  11. 常用Linux命令:
  12. 同一目录下有大量文件会影响效率吗_成考学习效率太低?可以从这7方面备考...
  13. AngularJS学习笔记之二:开发、调试和测试工具
  14. 万有引力(Law of universal gravitation)
  15. ping命令两种返回信息的区别
  16. SQLServer 查询建表语句
  17. unity3D游戏开发之iTween介绍和用法
  18. 电脑如何安装android系统版本,电脑如何安装Android系统 电脑安装安卓系统教程
  19. pandas之表格条件格式设置
  20. Ubuntu系统播放*.avi格式出错

热门文章

  1. 浅谈SVG的两个黑魔法
  2. Python进行微信公众号开发
  3. Android:视频播放器dkplayer
  4. 不一样的SpringBoot注解
  5. 杀人游戏-Tarjan
  6. NOJ 1116 哈罗哈的大披萨 【淡蓝】 状态压缩DP
  7. Online Tools
  8. python300行代码_Python:游戏:300行代码实现俄罗斯方块
  9. 大聪明教你学Java设计模式 | 第十三篇:观察者模式
  10. 什么是高并发,高并发的解决方案