JVM C1 编译优化:空检查擦除 1. 什么是空检查在Java里经常会判断一个对象是否为空,如果为空的对象访问方法,字段会抛出空指针异常,而空指针异常为运行异常,如果不抓取这个异常,有的时候会导致程序异常,为了解决这个问题,我们通常会在代码里显式的去判断该对象是否为空,进行为空的逻辑处理,这种做法逻辑虽然明确,但是由于空的逻辑并不是经常碰到,这样会导致有多余的逻辑分支判断。2. 隐式空检查 implicit exception我们先来看一个代码:public static int nullCheck(String valu
JVM C1 编译优化:合并相同的表达式-Global Value Numbering 之实现 1. 原因为了合并相同的运算,避免重复计算,通常在编译过程中,编译器会尝试合并相同的计算。C1在初始的时候内部会构建图结构的HIR,它由基本块BB构成一个控制流图,每个基本块里面是SSA形式的指令。单个BB块中通过ValueNumbering 来实现,多个BB块里实现的合并叫做Global Value Numbering ,但其算法的本质是一致的。2. 值编号 Value Numbering值编号(Value numbering):是指为每个SSA的instruction计算一个Hash
Soot 静态分析框架(七)模块分析 Java 9里开始支持模块化,以一个独立的开源项目jigsaw而来, 具体可以参考链接,https://openjdk.java.net/projects/jigsaw/ 同时也可以参考JSR376标准1. module-info 分析在模块化的时候,需要构建module_info.java来声明模块之间的关系,在Module声明里面定义了requires ,exports...
Soot 静态分析框架(六)数据流指向分析 1. 数据流指向分析1.1 指向分析指向分析,给定一个变量的函数,计算其可能的类型,指向信息,指向分析可以帮助其它的分析。1.2 Soot的指向分析框架soot提供了PointsToAnalysis ,PointsToSet接口。任何一个指向的分析都应该实现这两个接口。PointsToAnalysis 方法reachingObjects(Local l),该方法可以返回指向参...
Soot 静态分析框架(五)Annotation 的实现 1. Annotation的实现1.1 Java实现的Annotationjava 的自定义注解实现,通常我们会先自定义一个注解 import java.lang.annotation.ElementType; import java.lang.annotation.*; @Target({ElementType.TYPE,ElementType.FI...
soot 静态分析框架(四)Soot lambda 构建 1. JVM 的 Lambda构建和JVM构建Lambda的方式不同,因为Lambda表达式的类是一个运行的时候动态生成的类,是通过新的JVM的指令集InvokeDynamic来实现,通过调用java/lang/invoke/LambdaMetafactory.metafactory去生成动态的内部Class,在Class里面封装了实现的抽象方法,在抽象方法里实现了对源类的静态方法packag...
Soot 静态分析框架(三)Soot 过程分析 3.1Soot构建语法树Soot通过objectweb来进行字节码构建成语法树首先scene会去查找一些基础的JVM的类基础的对象Object, Boolean, Void, Integer, Long, Float等 字符串操作:String, StringBuffer的类 Exception, Throwable,以及一些常见的Error类 线程相关的, Thre...
Soot 静态分析框架(二)Soot的核心 2. Soot核心BodyBody 是对应的是Java一个函数体,Body是Soot的核心,Graph、Flow的构建都是基于Body进行分析,当然你可以基于不同的IR语言构建不同的Body,soot提供了JimpleBody,ShimpleBody, GrimpBody,当然soot主要是基于Jimple进行分析,在流程中构建的是JimpleBody,其它的Body的构建需要通过开关来控制...
Soot 静态分析框架(一)整体框架 1. Soot 静态分析框架Soot核心对象分别是:Scene、SootClass、SootMethod、SootField、Body。1.1 SceneScene:Scene表示完整的分析环境,可以通过Scene.v()调用设置Options的API,也可以获取一些过程间分析的信息,如call graphs, points-to informati...
用Bert模型计算句子的vector 1. Bert模型Bert模型是2018年google开源出来的NLP的模型,具体实现请参考:https://github.com/google-research/bert2. Bert模型计算句子的vector2.1 通过模型获取句子的encoder层 model = modeling.BertModel( config=bert_config, ...
从如何在Java删除乱码文件中开始说起 1. 乱码文件为何会生成乱码文件?原因很多,在上传的过程中编码不对,操作提供不支持该编码等,如果你尝试用Java的File对象去删除文件,甚至判断是否存在该文件都会发现返回的都是FalseString[]entries = file.list(); for(String s: entries){ File currentFile = new File(file.getPa...
文本相似度算法之编辑距离算法 定义编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:插入一个字符删除一个字符替换一个字符举个例子,计算learning和meaning的编辑距离,需要下列步骤learning -> mearning 将k替换成s...
【TensorFlow基础函数】tf.concat的用法 tf.concat 的用法TF官方的文档tf.concat( values, axis, name='concat')连接多个Tensor的操作values 多个Tensoraxis是哪个纬度0 代表第一纬度1 代表第二纬度2 代表第三纬度n 代表第n+1纬度案例: t1 = [[[1, 2, 3], [4, 5, 6]],[[7, 8, 9...
JVM源码研读:章节序列 Java 虚拟机基础JVM源码系列:JVM内部运行之Class的Method Java (JDK7)中的String常量和String.intern的实现 JVM源码系列:ThreadMXBean 打出堆栈信息原理分析 JVM源码系列:使用PrintAssembly打印java运行过程中的汇编 JVM源码系列:java如何实现多态性,基于itable, vtable源码分析 JVM源...
JVM源码系列:JVM内部运行之Class的Method 1. Class的属性在JVM中,通常一个class会初始化成Klass(接口), InstanceKlass(实例), Method(方法), ConstantsPool(常量区)在上图我们可以看到一个大概的Method,ConstantsPool,InstanceKlass之间的关系InstanceKlass 里面保存着ConstantPool指针Method指针的数组 Me...
Tensorflow 源码分析- 从GPU OOM开始说Tensorflow的BFC内存管理 前言在平台上跑GPU训练,结果CUDA OOM了,错误提示E Internal: failed initializing StreamExecutor for CUDA device ordinal 0: Internal: failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_OUT_OF_MEMORY; total memory repor...
Tensorflow 源码分析-会话与线程池之间的关系 1. Tensorflow 的sessionFactory创建新的会话,tensorflow使用了多工厂模式,在不同的场景下使用不同的工厂, 使用什么工厂模式由传递进来的SessionOptions来决定。1.1 注册工厂Tensorflow 提供了可以注册多会话工厂的模式,允许不同的模块注册自己的会话工厂void SessionFactory::Register(const string&...
【TensorFlow基础函数】tf.transpose函数说明和用法 tf.transpose 函数官网介绍https://www.tensorflow.org/api_docs/python/tf/transposetf.transpose( a, perm=None, name='transpose', conjugate=False)函数说明:依据指定perm交换输入张量的不同维度参数perm: ...
Tensorflow 源码分析-GPU调用是如何实现的 1. Tensorflow GPU支持Tensorflow 支持GPU进行运算,目前官方版本只支持NVIDIA的GPU,可以在tensorflow的官方上看到。Tensorflow 对GPU的运算的支持最小力度就是OP,也就是我们常说的算子,下图提供了Tensorflow的一些常见算子,而每个算子在Tensorflow上都会提供GPU的算法:关于OP的具体实现,在本篇博客中就不叙述了。2. Ten...