ASM: 一个低调成功者的自述

基因组组装:Hifiasm 使用教程 Hifiasm 可以生成单样本端粒到端粒的组装,结合了 HiFi、超长和 Hi-C 读取,可以说是最好的组装软件之一。prefix.p_utg.gfa: 经过处理的单倍型解析单元图谱,图中去除了可能由基因突变或数据噪声造成的小气泡,这些小气泡并不代表真实的单倍型信息。prefix.hap.p_ctg.gfa: 带有相位信息的连续片段图谱,它保留了具有相位标记的连续片段。prefix.p_ctg.gfa: 主要连续片段的图谱,它整合了一个包含长期阶段区块的完整组装结果。参数会影响这一处理过程的具体结果。 阅读详情

我就是那个不太知名的ASM, 你可能听说过我,也可能完全不知道我。

但是你要是认为我无足轻重,那就大错特错了。

没有我, 你经常使用的Spring , hibernate 将会失去最核心的功能。

没有我, Jython , JRuby 根本就移植不到Java 虚拟机中来。

没有我, Clojure, Groovy这些时髦的语言也没法在Java 虚拟机中运行。

一句话来概括我的能力: 我可以动态的修改已经编译过的class , 还可以动态的生成新的java class,  注意我说的动态这个词, 那可以是完全在运行时, 在内存中完成的, 这是一件非常厉害的本事。

既然我是为了动态的修改class 文件而生, 为什么叫做ASM呢?

其实我的创造者在创造我的时候, 为了起名也是大费周章,后来他突然想到C语言中的__asm__ 这个关键字, 可以允许你们在C语言中写点汇编,  他就把ASM这个关键字挪用了。

考虑到起名字确实是一件非常折磨人的事情, 我也就忍了, 就叫这个ASM吧, 至少能体现出我位于系统的最底层, 不, 应该说是最基础的层次。

我听到下面有人问了, 不就是动态生成类吗? 我完全可以像jsp那样, 使用JavaComplier接口在运行时动态的编译一个java 源代码, 这不也是动态生成class吗?

其实不一样, 你那是生成新的类, 能对现有的class 进行修改吗?

又有人发话了, 你为什么要动态的在运行时来修改类啊?   我为什么不能在编译以前就把类的功能都写好啊?

当然,你要是能把所有的功能都写好,那自然不错,但是人生之不如意,十之八九啊。

举一个最最极端的例子,你从别人那里获得了一个没有源代码的jar 文件, 你想对其中的一个class 进行增强,肿么办?   你可能说: 我可以反编译啊..  算了吧, 反编译的代码能看吗?

还有你们经常挂在嘴边的AOP, 在配置文件中声明一些功能例如事务支持, 然后要这些功能动态的织入到业务代码中,肿么办?    有人说我可以用Java 动态代理啊,  是, 你可以用,但是人家要是没有接口不还是得瞪眼干着急?

顺便吐个槽,你们AOP的那些术语实在是太烂, 什么PointCut, 什么Advice, 除了把人搞晕,还有什么用处?

对了, 还有那个Hibernate , 难道你不知道那个所谓的实体类是被我给增强过的? 你使用的并不是你看到的, 懂了么?

那到底是怎么实现的动态修改类的?  其实很简单, 去下载一个Java 虚拟机规范, 花上半年时间, 把每个字都搞懂了, 最后像黑客帝国中的Neo那样, 看到的整个世界都是二进制流, 你自然明白我是怎么做的了。

0?wx_fmt=jpeg

我给你简单的说一下: 我的核心呢主要是三个类, ClassReader, ClassWriter , ClassVisitor, 你用这三个家伙就可以去解析一个class 字节码, 获得字段了,方法了等信息, 当然最重要的可以对这些信息进行修改, 最终形成一个代表新class 的字节码数组,  剩下的事估计你就知道怎么做了, 其实也不属于我ASM了。

还不知道?  很简单嘛, 就是用个ClassLoader 把这个字节码数组Load到虚拟机中, 然后通过反射一调用,不就完了?

对了, 我的创造者使用了Visitor模式来设计这个API, 说实在的,设计的还真不错。 细节太多 ,我在这里就不罗嗦了, 感兴趣的同学可以看看   (http://download.forge.objectweb.org/asm/asm4-guide.pdf  ) , 绝对物超所值, 当然你的英文要好。

说了这么多,还是上一点代码吧, 让你对我有个直观的认识:

0?wx_fmt=png

我估计你也看不明白, 其实就是hello world了:

0?wx_fmt=png

你可能心里在想, word哥, 想使用你ASM需要非常透彻的理解Java 虚拟机指令和Java虚拟机内部结构才能使用啊。

没错, 我刚刚说过, 需要读懂Java 虚拟机规范 ,  我负责处理的是最基础的东西 , 很多码农并不会直接使用我来编程。

有个叫CGLib的家伙在我的基础之上做了不错的封装, 他做了一些高级的API抽象, 让普通的程序员也能够比较简单的对一个现成的类的行为进行修改。  由于更容易使用, CGLib的用户反而更多, 像Spring , Hibernate 。。。  我的风头完全被盖过了,   我想这就是我为什么这么低调、默默无闻的原因。

但是我初心不改 ,坚持对最底层的字节码进行操作, 我持续优化, 让自己变的又小又快, 为别的软件提供最有力的支持。

一开始我就说了Clojure对吧, 这是一个函数式编程的语言, 是解释执行的,没有编译过程, 那他凭什么能运行在Java 虚拟机上? 不就是利用我ASM来动态的生成字节码 吗?  Jython, JRuby, Groovy 也是大同小异。

最近Java 帝国给我颁发了一个特殊贡献勋章, 奖励我对繁荣Java 虚拟机市场做出的重大贡献, 不谦虚的说, 这绝对是名副其实, 原来JVM中只有一门语言,那就是Java ,   你看看现在语言多的都选不多来了。

好, 今天就说到这里吧, 下次再会。 

后记: 写文章真是奇妙,当“才思泉涌”,找到合适表达形式的时候,可以一挥而就, 这篇文章只花了40分钟就写完了, 但是你绝对想不到, 这其实已经是第3版了,前两版花费了我10多个小时的时间,从张大胖写到张家村, 我都不满意,直到找到这一版本的带点调侃的风格。  

如果你想看看那两篇胎死腹中的文章, 可以点击“阅读原文”  查看我的有道笔记中的文章。

0?wx_fmt=jpeg

公众号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


编辑推荐

掘金是一个高质量的技术社区,从移动开发到架构设计,编程语言到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。

0?wx_fmt=png

WAF指纹被动识别:基于代理池的低调侦察技术解析 Web应用防火墙(WAF)作为应用层核心安全组件,其原理是通过分析HTTP/HTTPS流量,依据预设规则集过滤恶意请求,从而保护Web应用免受攻击。其技术价值在于为在线业务提供了实时的威胁防护能力,广泛应用于电商、金融、政务等各类高价值Web服务场景。在渗透测试与安全评估中,准确识别目标WAF类型是制定有效绕过策略的关键前提。传统的主动指纹探测技术因特征明显、易触发告警而受限。本文聚焦于一种更为隐蔽的系统性方案,该方案深度融合了代理池资源管理与被动探针技术。通过轮换使用大量住宅或数据中心代理IP,将侦察流量 阅读详情

相关推荐

别只盯着main()!深入TI C2000 DSP的‘暗箱’:_c_int00和boot.asm都干了啥?

本文深入解析TI C2000 DSP芯片的启动流程,从硬件复位到main()函数执行的完整过程。详细探讨了_c_int00和boot.asm的关键作用,包括硬件初始化、启动介质选择、全局变量初始化和C语言环境准备等核心环节,帮助开发者理解DSP芯片的上电执行流程,提升系统稳定性。

weixin_33122947的博客 236

.net 怎么使用github_超快组装软件的使用hifiasm软件

点击上方关注我们获取更多背景三代组装常用的软件有canu、Falon、WGTBG及SmartDenovo等。canu软件的优点是组装的准确度高、连续度表现优秀的概率高,缺点是速度比较慢;而WTDBG软件运行速度快、但是对重复序列比较敏感,对简单基因组组装效果较好,Falon比较合适一定的杂合基因组组装。而最近发布出来的hifiasm,可以在一周内完成超大基因组的组装,极大的降低了整体的分...

weixin_39805732的博客 1648

hifiasm:Hifiasm

入门 # Install hifiasm (requiring g++ and zlib) git clone https://github.com/chhylp123/hifiasm cd hifiasm && make # Run on test data (use -f0 for small datasets) wget https://github.com/chhylp123/hifiasm/releases/download/v0.7/chr11-2M.fa.gz ./hifiasm -o test -t4 -f0 chr11-2M.fa.gz 2> test.log awk ' /^S/{print ">"$2;print $3} ' test.p_ctg.gfa > test.p_ctg.fa # get primary contigs in FASTA # Assembl

ASM 字节码插桩:从 Lambda 表达式讲起

字节码插桩是如今 Android 开发中非常普遍的一种技术手段,其应用范围非常广泛,涉及各种业务强关联或者和业务无关的领域,例如:无痕埋点、隐私合规检测、耗时方法统计、性能检测、双击防抖等.本篇文章再来详细介绍下在实现字节码插桩的过程中,我们难免会遇到的一个难点,也即从 Java 8 开始支持的一个新语法:Lambda 表达式,再以此扩展介绍向 Lambda 表达式进行字节码插桩的大致思路

m0_59162559的博客 740

汇编语言(ASM)从入门到精通

我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一种“常用”的具有“快速原型开发”能力的语言,却也是我们可以选择的语言中的一种。

Windows10下MATLAB2017a安装与破解实战:手把手教你搞定双镜像加载

本文详细介绍了在Windows 10系统下安装和破解MATLAB 2017a的完整步骤,包括双镜像加载、许可证配置及常见问题解决方案。通过手把手教程,帮助用户顺利完成安装并优化性能,特别适合工程计算领域的初学者和专业人士。

weixin_29053383的博客 420

学习Hifiasm组装?这一篇就够了

Hifiasm的介绍,结合多种资料

weixin_45898964的博客 8790

mcgs数据查表功能,用于大量数据对比查找对应数据,减少PLC代码

mcgs脚本实现数据查表功能

qq_24866535的博客 3271

基因组之单倍型基因组装(三)

官网:https://github.com/chhylp123/hifiasm直接进入官网右下角进入最新版本下载安装最新的版本cd hifiasmmake。

2401_89507557的博客 1819

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

【Web实战】微信小程序逆向

2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

若有战,召必回 1950

ASO100 推出ASM独立版块,苹果竞价广告进入中国是否不远了?

今天,国内最大的移动推广数据分析平台——ASO100,低调上线了ASM新版块,与之前功能发布不同的是,这次发布的ASM功能的访问域名是asm.aso100.com,此举背后是否意味着ASO100正式布局ASM,加大筹码的野心不得而知。 苹果官方竞价搜索广告ASM是2016年在美国区率先上线,2017年4月增加英国、澳大利亚和新西...

xinyuan82的博客

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变

本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。

weixin_29235525的博客 286

5v可编程rgb接口_[整机搭建] 低调的超频PC:10600K+Z490+RTX2060的RGB主机 [

AMD的CPU虽然全线都可以超频,不过可超的幅度确实可怜,所以想要有点成就感就得选intel了。CPU选择了10600k,相比大佬们的I7,I9算十分低调的。作了视频,请欣赏:整机展示▼▼▼▼▼主机配置:CPU英特尔(intel)十代酷睿i5 10600k主板华擎(ASRock)Z490 Phantom Gaming 4内存十铨(Team)Delta系列DDR4 3200 RGB灯条...

weixin_35347870的博客 1684

工业异常检测评价指标(I-AUROC、PRO等)

模型评价指标:TPR、FPR、Recall、ROC、AUC、AUROC、IoU、PRO、AUPRO等

qq_1532145264的博客 7446

matlab 点云学习目录【2026最新版】

matlab 点云学习目录。博客长期更新,本文最近更新时间为:2026年6月15日。

点云侠的博客 3万+

艺术编程-技术之声第9期

艺术编程-技术之声第9期技术未来:1.摩拜CEO:失败了,就当做公益吧 2.关爱脸盲,人人有责 3.如何买到一辆适合车震的二手车?技术之声: 1.ASM: 一个低调成功者的自述 2. 聊聊Java 平台上的非Java语言 3. 如何实现超高并发的无锁缓存? 4. 【死磕Java并发】—–Java内存模型之分析volatile 5. 理解本真的REST架构风格本周推荐-与君共勉: 1

IT小生 505

强化学习(Q-learning、DQN) —— 理论、案例与交互式 GUI 实现

本文详细介绍了强化学习中基于值函数的 Q-learning 算法及深度强化学习的 DQN 方法,从基本理论、数学模型到算法流程均进行了全面阐述。通过迷宫导航、股票交易策略和机器人控制等典型案例,展示了强化学习在处理高维、非线性和时变问题中的强大适应性。为了帮助工程师和研究者更直观地理解强化学习的训练过程,本文还提供了一份基于 Python 与 PyQt6 实现的交互式 GUI 演示系统代码示例,用户可以在线调整参数,实时观察累计奖励和 Q 值的变化,从而更深入地理解算法收敛和策略演化的过程。

闲人编程的博客 1477

感动满满:北京沙龙PPT诚意献上

  编者按:上周六,DBA+社群再度与一群热爱学习的小伙伴以及乐于分享的技术大牛欢聚帝都。这一次,除了一如既往的干货连连,更多了一份因热爱而真挚、因分享而快乐的感动。本文是DBA+社群联合发起人杨建荣老师于沙龙结束当天写下的回顾感言,由小编稍作整理编辑,把这份精彩与感动呈现给大家。   第二次线下沙龙在今天成功举办,从疲惫之中缓过神来,感觉还是需要说些什么。   有了第一次的沙龙举办经验,第二次相对来说就从容了许多,这其中离不开社群里热心的小伙伴帮助。首先是活动的组织,策划者。有了卢飞的帮助,帮我们继续

linjingyg的博客 157

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

那些Java平台上的非Java语言

  Java 的创造者们在一开始就把Java 语言和Java 虚拟机分开, 现在看来是个非常明智的决定。   Java虚拟机定义了一个"软CPU", 和Intel 的x86 的指令集一样, 这个软CPU也有一套自己的指令,这就意味者对于任意一门编程语言, 只要你能编译成Java 的字节码指令,或者在运行时动态的生成字节码指令, 就可以运行在Java虚拟机中。   1、Jython和JRuby   从这两位名字开头的字母 "J" 就可以看出来这两个语言和Java 的血缘关系。   没错,他们就是可以运

java_500的博客 436

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Orange‘s’ 一个操作系统的实现

orange's 一个操作系统的实现实操日记

qq_52666912的博客 3040

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Oracle数据库启停实战:从实例、监听到ASM/RAC的完整操作指南

数据库实例的启动与关闭是日常运维中看似基础却极易踩坑的操作,它不仅是startup和shutdown两条命令,更涉及监听器、ASM磁盘组、集群资源等多个层面的协同。理解各组件间的依赖关系与启动顺序,是保障生产环境平稳运行的关键。对于单实例环境,需要掌握SQL*Plus手动启停、监听器独立生命周期及Linux/Windows下的自动启停脚本;而对于RAC和Oracle Restart环境,则需依赖srvctl统一管理资源,避免状态不一致引发的意外重启。当启动失败或停止卡住时,可结合告警日志、端口检查、会话事务

weixin_34026276的博客 135

5v可编程rgb接口_[电脑]低调的超频PC:10600K+Z490+RTX2060的RGB主机

AMD的CPU虽然全线都可以超频,不过可超的幅度确实可怜,所以想要有点成就感就得选intel了。CPU选择了10600k,相比大佬们的I7,I9算十分低调的。整机展示▼▼▼▼▼主机配置:CPU英特尔(intel)十代酷睿i5 10600k主板华擎(ASRock)Z490 Phantom Gaming 4内存十铨(Team)Delta系列DDR4 3200 RGB灯条(8G*2)SSD...

weixin_39796752的博客 929

2017上半年的精华文章全在这里了

这里是2017年上半年码农翻身文章精华, 点击标题阅读, 欢迎转发分享。如果觉得不过瘾的话,一定要逛逛《码农翻身2016年文章精华》, 那里有更多有趣的技术故事。大话编...

码农翻身 303
上一篇: 张大胖和单元测试
下一篇: 聊聊Java 平台上的非Java语言
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值