Fenrier Lab

笔记-Java(JDK 1.9) StringBuffer 与 StringBuilder 的区别

StringBuffer 与 StringBuilder 都是为了更高效的操纵字符串而生,原因在于 String 类是不可变量,对其进行任何修改都会产生新的对象,而 StringBuffer 和 StringBuilder 则能够有效避免这一问题。但既然区分了两个类,就说明它们之间存在差别。 查看源码,发现 StringBuffer 与 StringBuilder 都继承 AbstractStringBuilder。下面从源码层面来对比两者 StringBuffer StringBuilder public StringBuffer(int capacity) public Strin...
点我阅读更多...

UDP 协议校验和计算

UDP 协议不具备差错恢复机制,但能通过校验和判断网络传输是否出现丢包。UDP 的校验和由三部分内容求和得到,分别是伪首部、首部以及数据报文,如下图所示 为了弄清楚这些字段究竟是什么东西,下面我们使用 wireshark 来抓取一个 UDP 包来详细分析。为了制造这个 UDP 包,使用如下代码来向某 ip 地址发送一段数据(这个 ip 不一定非得实际存在,我们只需要观察基于 UDP 协议封装的数据,所以只要能被 wireshark 获取就行) import java.io.IOException; import java.net.*; /** * Created by wangx on 2017/10/19. */ public class Client { p...
点我阅读更多...

Java 本地调用连接 Intel 数学核心库

纯 Java 语言实在算不上一种高性能的数值计算语言,当然抽象层次越高,效率一般越低,也没什么好抱怨的。如果有相当大的数值计算需求,那么我们可以将这部分代码用 C/C++ 来实现,再通过 Java 来调用,将能很好地提升 Java 程序的性能。 Intel@reg Math Kernel Library 是 Intel 公司开发的高性能数学函数库,作为例子,这里我们只讨论 BLAS 这块,其他部分根据说明文档和例子去操作就可以了。BLAS 全称是 Basic Linear Algebra Subprograms,即基本线性代数子程序,它本身只定义了三个层次的线性代数计算函数接口,其中 是向量与向量的计算,例如点积、向量求和等, 是矩阵与向量的计算,如矩阵向量乘法等, ...
点我阅读更多...

Java 本地调用(jni)编程基础

首先说明一下,根据经验来看,得益于高性能的 Java 虚拟机,使用纯 Java 实现的代码不一定就比 c 语言的慢。但是在大量的 c 语言库中还藏有不少珍宝,或许是没必要重复造轮子,或许是没有信心写出比那些经过多年考验的代码更健壮的程序,使用 Java 代码调用 C/C++ 仍然具有很高的价值。 一个 hello world 例子 本地方法的定义类似于接口函数,因为都还没实现嘛,不同的地方在于需要在返回值前面加上 native 关键字,例如下面的 Hello 类定义了 本地方法 say() //Hello.java public class Hello{ public native void say(String something); } 这段程序需要 c 语言实现,首先...
点我阅读更多...

AUTODYN 并行计算(单机)

使用多核 CPU 来加速 AUTODYN 计算是一个行之有效的方法,而且设置也相当简单,这里稍微记录一下。 首先是 MPI 路径,在安装 ANSYS 的时候就已经装上了 MPI,可以在 ANSYS 主目录下的 commonfiles 文件夹下找到 ,这里要做的是将其路径加入系统环境变量,在 cmd 中运行 mpirun 命令应该能出现一系列提示。 然后是编写脚本 ,在任一文件夹下创建 applfile 文件(无扩展名),加入一段参数 -e MPI_FLAGS=y0 -e ANSYS_EXD_MPI_TYPE=pcmpi -h machine1 -np 1 "G:\Program Files\ANSYS Inc\v162\aisol\AUTODYN\winx64\autodyn.e...
点我阅读更多...