Decorative image frame

Burrows-Wheeler变换(Burrows–Wheeler Transform)

最近听一个医学专业的同学提到了在进行基因分析中用到BWT算法,觉得挺有意思的,正巧赶上这次疫情在家,于是想研究一下这个算法。这个算法的核心思想在于,调整原来的字符串中字符的顺序(而不改变其长度及内容)从而更多的将重复的字符排列到一起,这样有助于其他的压缩算法获得更高的压缩比。这个算法在基因分析中大有用处也就顺理成章了,想想DNA的双链表示大概都是G-T-A-C会有很多这样的字符,那么运用BWT应该可以有比较好的效果。 Read More...

浅析Java中的InvokeDynamic

Java语言在被编译成class文件后,在class文件中,有专门的一个“常量池”(Constant Pool)区域来存储一些运行所需要的常量,包括一些写死的变量(比如定义一个字符串String str = "Hello world"以及一些符号,例如类和方法的的名称等)。在JVM(se7)规范中,有以下这些类型的常量:

CONSTANT_Class                           CONSTANT_Long            
CONSTANT_Fieldref                        CONSTANT_Double          
CONSTANT_Methodref                       CONSTANT_NameAndType     
CONSTANT_InterfaceMethodref              CONSTANT_Utf8            
CONSTANT_String                          CONSTANT_MethodHandle    
CONSTANT_Integer                         CONSTANT_MethodType      
CONSTANT_Float                           CONSTANT_InvokeDynamic       

大部分我们顾名思义,都可以知道是大概是干啥的,比如字符串啊,数字啊,方法名称之类的;但是可以注意到最后面一个是称之为CONSTANT_InvokeDynamic的常量,这个就有点陌生了。那么,这是一个什么样的常量?什么情况下会出现这个呢?

Read More...