为 Java 提供结构类型 JUnion

码农软件 · 软件分类 · 其他开发相关 · 2019-10-16 17:27:26

软件介绍

JUnion 用于为 Java 编程语言提供结构类型。

功能特性

  • 结构类型

  • 自动对齐数据

  • 手动对齐数据

  • 创建结构类型的数组

  • 64 位可寻址数组

  • 修改原生 DirectByteBuffers

  • 检查数组下标

  • 嵌套结构

  • 结构引用

  • 空引用检查

  • 数组切割

  • 泛型

  • 栈分配

查看更多特性介绍 https://tehleo.github.io/junion/features.html

当创建 int 数组时,我们有两个主要选项:

int[] intArray = new int[1000];  
Integer[] intBoxedArray = new Integer[1000];

那么,intArray, intBoxedArray 需要多少个字节才能存储 1000 个 int 数据?结果如下 ——

intArray 4016 bytes 4*1000 + ~16(around 16 bytes for array header) 
intBoxedArray 20016 bytes (4 + ~12 + ~4)*1000 + ~16 (具体数据取决于 VM)

可以看到,后者几乎是前者的 5 倍,因此我们应该偏向于选择使用原始数组 (primitive arrays)。

考虑这样一个问题

class Point { float x,y;}
Point[] arr = new Point[500];

arr 占用了 14016 个字节,而数据包含了 500 个 points,每个 points 有两个浮点数,因此 4000 个字节应该足够了。

但如果 Point 是一个结构类型(struct),arr 大约只占用 4000 个字节。

使用 JUnion,可以通过 @Struct 注解标记一个类来做到这一点!

创建 struct Vec3:

@Struct
public class Vec3 {
    public float x,y,z;
}

然后,你可以将其用作:

//Create a new struct array
Vec3[] arr = Vec3[10];
arr[5].x = 10;
Vec3 v = arr[5];
...
//
ByteBuffer a = ByteBuffer.allocateDirect(10*Mem.sizeOf(Vec3.class))
   .order(ByteOrder.nativeOrder());
//Modify Direct Native Bytebuffer as it were a struct
Vec3 arr = Mem.wrap(a);
arr[5].x = 10;
...

性能测试

本文地址:https://codercto.com/soft/d/16898.html

失业的程序员

失业的程序员

沈逸 / 2014-5-1 / 39.00元

这是一个程序员从失业到自行创业的奋斗历程,虽然囧事连连、过程曲折,却充满了趣味。本书以作者的真实创业经历为主线,文字幽默诙谐,情节生动真实,包括了招聘、团队管理和用户公关,以及技术架构设计、核心代码编写、商务谈判、项目运作等场景经验。 从初期的创业伙伴、领路人,到商业竞争对手,各种复杂的关系在各个关键时刻却都发生了意想不到的逆转。在历经千辛万苦,眼看快要成功时,主人公却几乎再次失业。 ......一起来看看 《失业的程序员》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具