java语言提供结构_JUnion: JUnion 用于为 Java 编程语言提供结构类型

(More Information available at this project's website)

(Current version 1.2.2 EA (Early-Access))

Project JUnion

1d7a952bf166b2d79aa5856d05a32356.png

badge.svg

3e79604bccd0709e23d3b10b062bb18e.png

Delivers struct types to Java programming language.

When creating arrays of int, we have two main options:

int[] intArray = new int[1000];

Integer[] intBoxedArray = new Integer[1000];

How many bytes do intArray, intBoxedArray take to store 1000 ints?

intArray 4016 bytes 4*1000 + ~16(around 16 bytes for array header)

intBoxedArray 20016 bytes (4 + ~12 + ~4)*1000 + ~16 (exact number depends on VM)

That is almost 5x more!

Well, this teaches us to prefer primitive arrays over their boxed versions.

So what is this project about?

Consider

class Point { float x,y;}

Point[] arr = new Point[500];

arr takes 14016 bytes

The data consits of 500 points, 2 floats each, thus 4000 bytes should be enough.

If Point was a struct, arr would take ~4000 bytes.

Wouldn't it be nice to be able to create struct types in Java that code like class and work like structs?

With JUnion you can do just that by marking a class with @Struct annotation!

Create struct Vec3:

@Struct

public class Vec3 {

public float x,y,z;

}

Afterwards you can use it as:

//Create a new struct array

Vec3[] arr = new 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, Mem.sizeOf(Vec3.class));

arr[5].x = 10;

...

For a list of features click here.

Why use struct types?

Struct types use less memory.

Have the performance of primitive types.

Allow you to set data in direct native ByteBuffers with class-like syntax.

Performance Test

f7df4511b8165ed2b67e774fce8d4605.png

Download

and usage/IDE integration guide here.

Support & Donations

Would you like to support JUnion? You can report bugs or request for new features here or chat here

Or would you like to make a donation?

You can do so via PayPap

News & Info

Status of JUnion 1.2.2:

JUnion 1.2.2 EA (Early-Access) is now available here

List of changes:

can allocate struct arrays on heap, off-heap, stack, the syntax uses annotation, eg:

Vec3[] arr = new Vec3[10]; //default currently allocates on heap

Vec3[] arr = new @Heap Vec3[10];

Vec3[] arr2 = new @Direct Vec3[10];

Vec3[] arr4 = new @DirectBuffer Vec3[10];

Vec3[] arr5 = new @Stack Vec3[10];

Vec3[] arr7 = new @Heap(ArrayType.Byte) Vec3[10]; //underlying data is Java byte[] array

the underlying storage can be retrieved as Java array/Buffer with Mem.getJavaArray(arr) and Mem.getJavaBuffer(arr)

added StructType class, which can be used to find information about a struct

added StructList, which serves as a resizable struct array, it stores its elements as data not as references (not yet finished)

Array allocation is done through ArrayAllocator interface and can be customized by the user if needed

Bridge interface serves as the link between the application and ram. The default bridge interface DefaultBridge uses Unsafe to read and write memory.

added MemInit class which stores related settings, such as setting the bridge interface, allocator interface to use, etc.

Finishing the current release/Documentation/tests are now planned to finalize 1.2.x release.

Roadmap to JUnion 1.2.x has been announced here

Wiki has been created and can be accessed here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值