OpenHFT/Java-Lang


Java Language support http://chronicle.software

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.OpenHFT:Java-Lang:v6.3.4'
	}
	dependencies {
		implementation("com.github.OpenHFT:Java-Lang:v6.3.4")
	}
	<dependency>
	    <groupId>com.github.OpenHFT</groupId>
	    <artifactId>Java-Lang</artifactId>
	    <version>v6.3.4</version>
	</dependency>

                            
    libraryDependencies += "com.github.OpenHFT" % "Java-Lang" % "v6.3.4"
        
        

                            
    :dependencies [[com.github.OpenHFT/Java-Lang "v6.3.4"]]
        
        

Readme


JavaLang


This project has been superseded by Chronicle-Core and Chronicle-Bytes project. Please consider migration!


This module provides marshalling, de-marshalling and handling of thread safe off heap memory through ByteBuffers.

This module is available on maven central as

<dependency>
    <groupId>net.openhft</groupId>
    <artifactId>lang</artifactId>
    <version><!--replace with the latest version--></version>
</dependency>

The version 6.x signifies that it is build for Java 6+. (It requires Java 6 update 18 or later to build)

JavaDoc

Check out our documentation at [JavaDoc] (http://openhft.github.io/Java-Lang/apidocs/)

Working with off heap objects.

Java-Lang 6.1 adds support for basic off heap data structures. More collections types and more complex data types will be added in future versions.

public interface DataType {
     // add getters and setters here
}

// can create an array of any size (provided you have the memory) off heap.
HugeArray<DataType> array = HugeCollections.newArray(DataType.class, 10*1000*1000*1000L);
DataType dt = array.get(1111111111);

// set data on dt
array.recycle(dt); // recycle the reference (or discard it)

// create a ring writeBuffer
HugeQueue<DataType> queue = HugeCollections.newQueue(DataType.class, 10*1000*1000L);
// give me a reference to an object to populate
DataType dt2 = queue.offer();
// set the values od dt2
queue.recycle(dt2);

DataType dt3 = queue.take();
// get values
queue.recycle(dt3);

This is designed to be largely GC-less and you can queue millions of entries with 32 MB heap and not trigger GCs.

Working with buffers

To work with buffers there is a several options:

Both classes provide functionality:

  • write\read operations for primitives (writeLong(long n), readLong() etc.)
  • locking in native memory, so you can add thread safe constructs to your native record.
  • CAS operations for int and long boolean compareAndSwapInt(long offset, int expected, int x), boolean compareAndSwapLong(long offset, long expected, long x)
  • addAndGetInt and getAndAddInt operations

Example

ByteBuffer byteBuffer = ByteBuffer.allocate(SIZE);
ByteBufferBytes bytes = new ByteBufferBytes(byteBuffer);
for (long i = 0; i < bytes.maximumLimit(); i++)
    bytes.writeLong(i);
for (long i = bytes.maximumLimit()-8; i >= 0; i -= 8) {
    int j = bytes.readLong(i);
    assert i ==  j;
}

Building for eclipse

Download Java-Lang zip from git https://github.com/OpenHFT/Java-Lang/archive/master.zip

Unzip master.zip, Java-Lang-master folder will be extracted from zip.

cd Java-Lang-master
mvn eclipse:eclipse

Now you have an eclipse project, import project into Eclipse

If your Eclipse configuration is not UTF-8, after importing the project you may see some errors and strange characters in some .java files. To get rid of this problem change character enconding to UTF-8: project->properties->resource->text file encoding->utf8