Coder Social home page Coder Social logo

jillegal's Introduction

  1. What is Jillegal? ==============

Jillegal is a library including unknown tricks of Java. It abstracts developer from low-level details to implement those tricks. Its design and logic are based on Java 8 and JRockit so it can be used at only Java 8 and JRockit platforms. Java 6 and Java 7 supports are in progress and as soon as possible they will be released. Demo applications are avaiable at https://github.com/serkan-ozal/jillegal-demo and https://github.com/serkan-ozal/jillegal-demo-web.

NOTE: This is an experimental project. So, please notify me for all kind of suggestions, feedbacks and issues (with crash log files and test cases if possible :))

Currently it has three main modules: OffHeap, Instrumentation and In Memory Compiler.

1.1. OffHeap Module

Design and logic of Jillegal OffHeap module different from all of the other offheap frameworks. It doesn't serilalize/deserialize objects to/from allocated offheap memory region. Because objects already lives on offheap and GC doesn't track them :). With this feature, all objects in pool are exist as sequential at memory, so sequential accessing to them is faster. Because, they will be fetched to CPU cache together as limited size of CPU cache.

LIMITATIONS:

  • Only Hotspot Java 8 JVM, Oracle JRockit JVM and Azul's Zulu Java 8 JVM are supported. Java 6 and Java 7 based JVMs are not supported yet.

  • Only CMS collector (-XX:+UseConcMarkSweepGC), G1 collector (-XX:+UseG1GC) and Serial collector (-XX:+UseSerialGC) are supported for Hotspot JVM. Don't try with other collectors such as Default or Parallel collector (-XX:+UseParallelGC or -XX:+UseParallelOldGC) since there is an issue associated with these collectors's Young GC collections :).

  • Offheap module needs to disabled compressed-oops (-XX:-UseCompressedOops) since there is no quarantee that allocated native memory space can be represented with compressed-oops with huge memory sizes.

  • Off-Heap objects must not reference to On-Heap objects since they can be moved while GC and Off-Heap objects are not aware of this movement since they are not under GC control. However, On-Heap objects can reference to Off-Heap objects and also Off-Heap objects can references to Off-Heap objects as well.

1.2. Instrumentation Module

Instrumenting and redefining any Java class, interface, ... (even core Java classes) at runtime with developer friendly API (with Builder Pattern based design) is supported. You can add your custom pre/post listeners to method and constructor invocations dynamically. It serves a platform to develop your custom AOP framework. It uses Java Instrumentation API but adding extra VM argument (like -javaagent:<jarpath>[=<options>]) is not required. Jillegal has its own internal agent and it can enable it's agent at runtime dynamically.

1.3. In Memory Compiler Module

Compiling Java and Groovy source codes in memory is supported. You can compile your Java and Groovy based source codes at runtime in memory and can get its compiled class.

  1. Compile and Build =======

  2. First clone code from GitHub. git clone https://github.com/serkan-ozal/jillegal.git

  3. To set JDK / JRE installation/home directory:

    2.1. For Java 8, add an environment variable named JAVA8_HOME points to JDK 8 / JRE 8 installation/home directory.

    2.2. For JRockit, add an environment variable named JROCKIT_HOME points to JRockit JDK / JRockit JRE installation/home directory.

  4. Compile with maven. mvn clean install

  5. Installation =======

In your pom.xml, you must add repository and dependency for Jillegal. You can change jillegal.version to any existing Jillegal library version. Latest version is 2.1-SNAPSHOT.

...
<properties>
    ...
    <jillegal.version>2.1-SNAPSHOT</jillegal.version>
    ...
</properties>
...
<dependencies>
    ...
	<dependency>
		<groupId>tr.com.serkanozal</groupId>
		<artifactId>jillegal</artifactId>
		<version>${jillegal.version}</version>
	</dependency>
	...
</dependencies>
...
<repositories>
	...
	<repository>
		<id>serkanozal-maven-repository</id>
		<url>https://github.com/serkan-ozal/maven-repository/raw/master/</url>
	</repository>
	...
</repositories>
...

For JRockit usage, change <artifactId> to jillegal-jrockit in dependency such as:

...
	<dependency>
		<groupId>tr.com.serkanozal</groupId>
		<artifactId>jillegal-jrockit</artifactId>
		<version>${jillegal.version}</version>
	</dependency>
...
  1. Usage =======

To initialize Jillegal and find Jillegal Aware classes, there are two ways:

  1. You just need to call explicitly making aware method at startup in anywhere of your application.
...

tr.com.serkanozal.jillegal.Jillegal.init();

...

or

  1. You can extend your main class from tr.com.serkanozal.jillegal.util.JillegalAware class.
...

public class JillegalDemo extends JillegalAware {

	public static void main(String[] args) {
	
		...
	
	}
	
}	

...

4.1. Jillegal Aware OffHeap Pool

To make any of your class, just annotate it with tr.com.serkanozal.jillegal.config.annotation.JillegalAware annotation. So it will be detected by Jillegal on initialize cycle and will be instrumented automatically to be aware of Jillegal.

@JillegalAware
public class JillegalAwareSampleClassWrapper {

	@OffHeapObject
	private SampleClass sampleClass;

	@OffHeapArray(length = 1000)
	private SampleClass[] sampleClassArray;

	public SampleClass getSampleClass() {
		return sampleClass;
	}

	public void setSampleClass(SampleClass sampleClass) {
		this.sampleClass = sampleClass;
	}

	public SampleClass[] getSampleClassArray() {
		return sampleClassArray;
	}

	public void setSampleClassArray(SampleClass[] sampleClassArray) {
		this.sampleClassArray = sampleClassArray;
	}

}
public class SampleClass {

	private int i1 = 5;
	private int i2 = 10;
	private int order;

	public int getI1() {
		return i1;
	}

	public int getI2() {
		return i2;
	}

	public int getOrder() {
		return order;
	}
	
}
JillegalAwareSampleClassWrapper sampleClassWrapper = new JillegalAwareSampleClassWrapper();

sampleClassWrapper.getSampleClass().setOrder(-1);

SampleClass[] objArray = sampleClassWrapper.getSampleClassArray();
    	
for (int i = 0; i < objArray.length; i++) {
    	SampleClass obj = objArray[i];
    	obj.setOrder(i);
    	System.out.println("Order value of auto injected off-heap object field has been set to " + i);
}

System.out.println("Order value of sample object at off heap pool: " + 
sampleClassWrapper.getSampleClass().getOrder());
    	
for (int i = 0; i < objArray.length; i++) {
    	SampleClass obj = objArray[i];
    	System.out.println("Order value of " + i + ". object at off heap pool: " + obj.getOrder());
}

4.2. Eager Referenced Object OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

ObjectOffHeapPoolCreateParameterBuilder<SampleClass> offHeapPoolParameterBuilder = 
				new ObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
						type(SampleClass.class).
						objectCount(ELEMENT_COUNT).
						makeOffHeapableAsAuto(true).
						referenceType(ObjectPoolReferenceType.EAGER_REFERENCED);
ObjectOffHeapPoolCreateParameter<SampleClass> offHeapPoolParameter = offHeapPoolParameterBuilder.build();
EagerReferencedObjectOffHeapPool<SampleClass> eagerReferencedObjectPool = 
				offHeapService.createOffHeapPool(offHeapPoolParameter);
for (int i = 0; i < ELEMENT_COUNT; i++) {
	SampleClass obj = eagerReferencedObjectPool.get();
	...
}

4.3. Lazy Referenced Object OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

ObjectOffHeapPoolCreateParameterBuilder<SampleClass> offHeapPoolParameterBuilder = 
				new ObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
						type(SampleClass.class).
						objectCount(ELEMENT_COUNT).
						makeOffHeapableAsAuto(true).
						referenceType(ObjectPoolReferenceType.LAZY_REFERENCED);
ObjectOffHeapPoolCreateParameter<SampleClass> offHeapPoolParameter = offHeapPoolParameterBuilder.build();
LazyReferencedObjectOffHeapPool<SampleClass> lazyReferencedObjectPool = 
				offHeapService.createOffHeapPool(offHeapPoolParameter);
for (int i = 0; i < ELEMENT_COUNT; i++) {
	SampleClass obj = lazyReferencedObjectPool.get();
	...
}

4.4. Primitive Type Array OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

PrimitiveTypeArrayOffHeapPool<Integer, int[]> primitiveTypeArrayPool = 
				offHeapService.createOffHeapPool(
						new ArrayOffHeapPoolCreateParameterBuilder<Integer>().
								type(Integer.class).
								length(ELEMENT_COUNT).
								usePrimitiveTypes(true).
							build());

int[] primitiveArray = primitiveTypeArrayPool.getArray();

for (int i = 0; i < primitiveArray.length; i++) {
	primitiveArray[i] = i;
}

4.5. Complex Type Array OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

ComplexTypeArrayOffHeapPool<SampleClass, SampleClass[]> complexTypeArrayPool = 
				offHeapService.createOffHeapPool(
						new ArrayOffHeapPoolCreateParameterBuilder<SampleClass>().
								type(SampleClass.class).
								length(ELEMENT_COUNT).
								initializeElements(true).
							build());
							
SampleClass[] complexArray = complexTypeArrayPool.getArray();

for (int i = 0; i < complexArray.length; i++) {
	SampleClass obj = complexArray[i];
	...
}	

4.6. Extendable Eager Referenced Object OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

EagerReferencedObjectOffHeapPool<SampleClass> sequentialObjectPool = 
				offHeapService.createOffHeapPool(
						new ObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
								type(SampleClass.class).
								objectCount(ELEMENT_COUNT).
								referenceType(ObjectPoolReferenceType.EAGER_REFERENCED).
							build());

ExtendableObjectOffHeapPool<SampleClass> extendableObjectPool =
				offHeapService.createOffHeapPool(
						new ExtendableObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
								forkableObjectOffHeapPool(sequentialObjectPool).
							build());

for (int i = 0; i < TOTAL_ELEMENT_COUNT; i++) {
	SampleClass obj = extendableObjectPool.get();
	...
}	

4.7. Extendable Lazy Referenced Object OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

LazyReferencedObjectOffHeapPool<SampleClass> sequentialObjectPool = 
				offHeapService.createOffHeapPool(
						new ObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
								type(SampleClass.class).
								objectCount(ELEMENT_COUNT).
								referenceType(ObjectPoolReferenceType.LAZY_REFERENCED).
							build());

ExtendableObjectOffHeapPool<SampleClass> extendableObjectPool =
				offHeapService.createOffHeapPool(
						new ExtendableObjectOffHeapPoolCreateParameterBuilder<SampleClass>().
								forkableObjectOffHeapPool(sequentialObjectPool).
							build());

for (int i = 0; i < TOTAL_ELEMENT_COUNT; i++) {
	SampleClass obj = extendableObjectPool.get();
	...
}	

4.8. String OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

StringOffHeapPool stringPool = 
				offHeapService.createOffHeapPool(
						new StringOffHeapPoolCreateParameterBuilder().
								estimatedStringCount(STRING_COUNT).
								estimatedStringLength(ESTIMATED_STRING_LENGTH).
							build());
   
for (int i = 0; i < STRING_COUNT; i++) {
	System.out.println(stringPool.get("String " + i));
}
    	

4.9. Extendable String OffHeap Pool

OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

DeeplyForkableStringOffHeapPool stringPool = 
				offHeapService.createOffHeapPool(
						new StringOffHeapPoolCreateParameterBuilder().
								estimatedStringCount(STRING_COUNT).
								estimatedStringLength(ESTIMATED_STRING_LENGTH).
							build());
   
ExtendableStringOffHeapPool extendableStringPool =
				offHeapService.createOffHeapPool(
						new ExtendableStringOffHeapPoolCreateParameterBuilder().
								forkableStringOffHeapPool(stringPool).
							build());

for (int i = 0; i < TOTAL_STRING_COUNT; i++) {
	System.out.println(stringPool.get("String " + i));
}

4.10. Instrumentation Module

public class SampleClass {

	public SampleClass() {
		System.out.println("SampleInstrumentClass.SampleClassToInstrument()"); 
	}

	public void methodToIntercept() {
		System.out.println("SampleInstrumentClass.methodToIntercept()"); 
	}
	
}
Jillegal.init();

System.out.println("Before Intrumentation: ");
System.out.println("=====================================================");

SampleClass obj1 = new SampleClass();
obj1.methodToIntercept();

System.out.println("=====================================================");

System.out.println("After Intrumentation: ");
System.out.println("=====================================================");

InstrumentService instrumentService = InstrumentServiceFactory.getInstrumentService();
Instrumenter<SampleClass> inst = instrumentService.getInstrumenter(SampleClass.class);
GeneratedClass<SampleClass> redefinedClass =
	inst.
		insertBeforeConstructors(
			new BeforeConstructorInterceptor<SampleClass>() {
				@Override
				public void beforeConstructor(SampleClass o, Constructor<SampleClass> c, Object[] args) {
					System.out.println("Intercepted by Jillegal before constructor ...");
				}}).

		insertAfterConstructors("System.out.println(\"Intercepted by Jillegal after constructor ...\");").

		insertBeforeMethod("methodToIntercept", 
			new BeforeMethodInterceptor<SampleClass>() {
				@Override
				public void beforeMethod(SampleClass o, Method m, Object[] args) {
					System.out.println("Intercepted by Jillegal before methodToIntercept method ...");
				}}).

		insertAfterMethod("methodToIntercept", 
			"System.out.println(\"Intercepted by Jillegal after methodToIntercept method ...\");").
                    			
	build();

instrumentService.redefineClass(redefinedClass); 

SampleClass obj2 = new SampleClass();
obj2.methodToIntercept();
        
System.out.println("=====================================================");

4.11. In Memory Java Compiler

ClassCompilerService classCompilerService = 
			ClassCompilerServiceFactory.getClassCompilerService();
			
String code = 
	"package tr.com.serkanozal.jillegal.compiler.demo;"+ "\n" +
	"\n" +
	"public class SampleJavaClass {" + "\n" +
	"\n" +
	"\t" + "public String toString() {" + "\n" +
	"\t" + "\t" + "return \"I am SampleJavaClass\";" + "\n" +
	"\t" + 	"}" + "\n" +
	"\n" +
	"}";

Class<?> compiledClass = classCompilerService.getClassCompiler(DefaultCodeType.JAVA).compile(code);
Object obj = compiledClass.newInstance();
		
System.out.println(obj.toString());

4.12. In Memory Groovy Compiler

ClassCompilerService classCompilerService = 
			ClassCompilerServiceFactory.getClassCompilerService();
			
String code = 
	"package tr.com.serkanozal.jillegal.compiler.demo;"+ "\n" +
	"\n" +
	"public class SampleGroovyClass {" + "\n" +
	"\n" +
	"\t" + "public String toString() {" + "\n" +
	"\t" + "\t" + "def str = \"I am SampleGroovyClass\";" + "\n" +
	"\t" + "\t" + "return str;" + "\n" +
	"\t" + 	"}" + "\n" +
	"\n" +
	"}";

Class<?> compiledClass = classCompilerService.getClassCompiler(DefaultCodeType.GROOVY).compile(code);
Object obj = compiledClass.newInstance();
		
System.out.println(obj.toString());
  1. Roadmap =======
  • Parallel GC support for OffHeap module.

  • Object lifecycle awareness support for OffHeap module.

  • Java 6 / Java 7 support for OffHeap module.

  • IBM JVM support for OffHeap module.

jillegal's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jillegal's Issues

offheap demo fail

in the comment of last issue, you said
However there are some problems for offheap part of project due to compact phase of GC.
These problems can be handled by VM arguments but i am working on a better solution.

I do have a problem when testing offheap demo.
How to solve this problem?

Used memory on heap before On-Heap allocation: 1017992 bytes
Array for class with size 10000000 for class test.OffHeapDemo$SampleClass has be
en allocated ...
22
Array for class test.OffHeapDemo$SampleClass has been allocated, got and set for
10000000 elements in 1036 milliseconds ...
Used memory on heap after On-Heap allocation: 281828624 bytes
Memory used by On-Heap allocation: 280810632 bytes

Used memory on heap before Off-Heap allocation: 863648 bytes
[INFO] Using attach provider: sun.tools.attach.WindowsAttachProvider@d320d6
Class Path: D:\ubuntu\projects\jillegal\target\test-classes;D:\ubuntu\projects\j
illegal\target\classes;C:\Windows\System32\config\systemprofile.m2\repository\t
r\com\serkanozal\jillegal-agent\1.0.4-RELEASE\jillegal-agent-1.0.4-RELEASE.jar;C
:\Windows\System32\config\systemprofile.m2\repository\com\sun\tools\1.6.2\tools
-1.6.2.jar;C:\Windows\System32\config\systemprofile.m2\repository\tr\com\serkan
ozal\jcommon\1.0.1-RELEASE\jcommon-1.0.1-RELEASE.jar;C:\Windows\System32\config
systemprofile.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Windows\Syst
em32\config\systemprofile.m2\repository\com\google\guava\guava\13.0\guava-13.0.
jar;C:\Windows\System32\config\systemprofile.m2\repository\commons-lang\commons
-lang\2.6\commons-lang-2.6.jar;C:\Windows\System32\config\systemprofile.m2\repo
sitory\cglib\cglib\2.2\cglib-2.2.jar;C:\Windows\System32\config\systemprofile.m
2\repository\asm\asm\3.1\asm-3.1.jar;C:\Windows\System32\config\systemprofile.m
2\repository\org\javassist\javassist\3.17.1-GA\javassist-3.17.1-GA.jar;C:\Window
s\System32\config\systemprofile.m2\repository\junit\junit\4.11\junit-4.11.jar;C
:\Windows\System32\config\systemprofile.m2\repository\org\hamcrest\hamcrest-cor
e\1.3\hamcrest-core-1.3.jar
OS Name: Windows 7
Using ClassPath: D:\ubuntu\projects\jillegal\target\test-classes;D:\ubuntu\proje
cts\jillegal\target\classes;C:\Windows\System32\config\systemprofile.m2\reposit
ory\tr\com\serkanozal\jillegal-agent\1.0.4-RELEASE\jillegal-agent-1.0.4-RELEASE.
jar;C:\Windows\System32\config\systemprofile.m2\repository\com\sun\tools\1.6.2
tools-1.6.2.jar;C:\Windows\System32\config\systemprofile.m2\repository\tr\com\s
erkanozal\jcommon\1.0.1-RELEASE\jcommon-1.0.1-RELEASE.jar;C:\Windows\System32\co
nfig\systemprofile.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Windows
\System32\config\systemprofile.m2\repository\com\google\guava\guava\13.0\guava-
13.0.jar;C:\Windows\System32\config\systemprofile.m2\repository\commons-lang\co
mmons-lang\2.6\commons-lang-2.6.jar;C:\Windows\System32\config\systemprofile.m2
\repository\cglib\cglib\2.2\cglib-2.2.jar;C:\Windows\System32\config\systemprofi
le.m2\repository\asm\asm\3.1\asm-3.1.jar;C:\Windows\System32\config\systemprofi
le.m2\repository\org\javassist\javassist\3.17.1-GA\javassist-3.17.1-GA.jar;C:\W
indows\System32\config\systemprofile.m2\repository\junit\junit\4.11\junit-4.11.
jar;C:\Windows\System32\config\systemprofile.m2\repository\org\hamcrest\hamcres
t-core\1.3\hamcrest-core-1.3.jar
Agent path: C:\Windows\System32\config\systemprofile.m2\repository\tr\com\serka
nozal\jillegal-agent\1.0.4-RELEASE\jillegal-agent-1.0.4-RELEASE.jar
Agentmain: sun.instrument.InstrumentationImpl@13f9276 - Arguments: null
Exception in thread "main" java.lang.ClassCastException: /30165213 cannot be cas
t to test.OffHeapDemo$SampleClass
at test.OffHeapDemo.demoObjectOffHeapPool(OffHeapDemo.java:142)
at test.OffHeapDemo.main(OffHeapDemo.java:32)
Sequential Off Heap Object Pool with size 10000000 for class test.OffHeapDemo$Sa
mpleClass has been allocated ...

Parallel GC support

Hi Serkan Ozal

You mentioned there's an issue with Parallel GC and jillegal library, but did not mentioned any details.

I had a similar project and observed crashes during the GC cycle with Parallel GC, and I believe this is the same issue. Can you share any experience you had with this issue?

build fail

I cloned this project and use mvn package to install it but failed.
is it supporting oracle jdk 7?

my environment:
mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 16:44:56+0800)
Maven home: D:\programs\apache-maven-3.0.4\bin..
Java version: 1.7.0_10, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_10\jre
Default locale: en_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"

mvn package
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for
tr.com.serkanozal:jillegal:jar:1.0.5-RELEASE
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-
plugin is missing. @ line 59, column 21
[WARNING] The expression ${version} is deprecated. Please use ${project.version}
instead.
[WARNING] The expression ${version} is deprecated. Please use ${project.version}
instead.
[WARNING] The expression ${version} is deprecated. Please use ${project.version}
instead.
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten t
he stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support buildin
g such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Jillegal 1.0.5-RELEASE
[INFO] ------------------------------------------------------------------------
[INFO]

[INFO] --- maven-resources-plugin:2.4:resources (default-resources) @ jillegal -

[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ jillegal ---
[INFO] Compiling 88 source files to D:\ubuntu\projects\jillegal\target\classes
[INFO] -------------------------------------------------------------
[WARNING] COMPILATION WARNING :
[INFO] -------------------------------------------------------------
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\off
heap\memory\DirectMemoryServiceImpl.java:[12,15] Unsafe is internal proprietary
API and may be removed in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JillegalUtil.java:[23,21] VMManagement is internal proprietary API and may be
removed in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[43,21] VMManagement is internal proprietary API and may be remov
ed in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[44,15] Unsafe is internal proprietary API and may be removed in
a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\off
heap\memory\DirectMemoryServiceImpl.java:[21,12] Unsafe is internal proprietary
API and may be removed in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JillegalUtil.java:[51,8] VMManagement is internal proprietary API and may be r
emoved in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JillegalUtil.java:[51,35] VMManagement is internal proprietary API and may be
removed in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[126,19] Unsafe is internal proprietary API and may be removed in
a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[153,32] Unsafe is internal proprietary API and may be removed in
a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[155,22] Unsafe is internal proprietary API and may be removed in
a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[230,15] Unsafe is internal proprietary API and may be removed in
a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[1222,8] VMManagement is internal proprietary API and may be remo
ved in a future release
[WARNING] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\uti
l\JvmUtil.java:[1222,35] VMManagement is internal proprietary API and may be rem
oved in a future release
[INFO] 13 warnings
[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[10,59] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[15,37] error: package tr.com.serkanozal
.jcommon.util does not exist
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[18,81] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[19,35] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[20,33] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[21,36] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[22,40] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[24,40] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[88,18] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[101,43] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[12,59] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[20,82] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[21,35] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[22,33] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[23,36] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[24,40] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[32,41] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[133,18] error: cannot find s
ymbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[149,43] error: cannot find s
ymbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\util
JvmUtil.java:[45,37] error: package tr.com.serkanozal.jcommon.util does not exis
t
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[187,24] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[190,9] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[195,8] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\instr
ument\impl\DefaultInstrumenter.java:[39,7] error: DefaultInstrumenter is not abs
tract and does not override abstract method argumentId(int) in Instrumenter
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\util
JvmUtil.java:[541,14] error: cannot find symbol
[INFO] 25 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.614s
[INFO] Finished at: Thu Nov 21 15:25:58 CST 2013
[INFO] Final Memory: 9M/25M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.
3.2:compile (default-compile) on project jillegal: Compilation failure: Compilat
ion failure:
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[10,59] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[15,37] error: package tr.com.serkanozal
.jcommon.util does not exist
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[18,81] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[19,35] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[20,33] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[21,36] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[22,40] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[24,40] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[88,18] error: cannot find sym
bol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\LazyReferencedObjectOffHeapPool.java:[101,43] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[12,59] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[20,82] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[21,35] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[22,33] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[23,36] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[24,40] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[32,41] error: cannot find sy
mbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[133,18] error: cannot find s
ymbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\EagerReferencedObjectOffHeapPool.java:[149,43] error: cannot find s
ymbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\util
JvmUtil.java:[45,37] error: package tr.com.serkanozal.jcommon.util does not exis
t
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[187,24] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[190,9] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\offhe
ap\pool\impl\BaseObjectOffHeapPool.java:[195,8] error: cannot find symbol
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\instr
ument\impl\DefaultInstrumenter.java:[39,7] error: DefaultInstrumenter is not abs
tract and does not override abstract method argumentId(int) in Instrumenter
[ERROR] \ubuntu\projects\jillegal\src\main\java\tr\com\serkanozal\jillegal\util
JvmUtil.java:[541,14] error: cannot find symbol
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
eption
D:\ubuntu\projects\jillegal>

Offheap object with offheap array within

It's not an issue, rather a question: I,m trying to make offheap object, that contains offheap array

@JillegalAware
public class HashVO extends DefaultVO {
    private HashVONode[] voarray;
    public void init(){
        OffHeapService offHeapService = OffHeapServiceFactory.getOffHeapService();

        arrayPool = offHeapService.createOffHeapPool(
                new ArrayOffHeapPoolCreateParameterBuilder<HashVONode>().
                        type(HashVONode.class).
                        length(10000).
                        initializeElements(false).
                        build());

        //this.voarray = arrayPool.getArray();
        setVoarray(arrayPool.getArray());

    }

    public void setVoarray(HashVONode[] voarray){
        this.voarray = voarray;
    }}

When I allocate it on heap - everything works fine, but when I trying to get it as offheap object

        EagerReferencedObjectOffHeapPool<HashVO> map_pool =
                offHeapService.createOffHeapPool(
                        new ObjectOffHeapPoolCreateParameterBuilder<HashVO>().
                                type(HashVO.class).
                                objectCount(10).
                                referenceType(ObjectPoolReferenceType.EAGER_REFERENCED).
                                build());
        HashVO hv = map_pool.get();

I'm getting JVM crash

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0xa) at pc=0x00000001030e79a9, pid=3718, tid=5891
#
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b05) (build 1.8.0_20-ea-b05)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b05 mixed mode bsd-amd64 )
# Problematic frame:
# j  impl.jilligal.HashVO.setVoarray([Limpl/jilligal/HashVONode;)V+2
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again```

I think that I'm doing something wrong, but can't figure out what.

Thanks in advance
PS Is there some doc available? 

Various errors when accessing ComplexTypeArrayOffHeapPool

Hi,
After previous issue, I made some tests and now I getting other mysterious errors.

At each run I'm randomly getting or exception

Exception in thread "main" java.lang.AbstractMethodError: tr.com.serkanozal.jillegal.offheap.pool.impl.ComplexTypeArrayOffHeapPool.getAt(I)Ljava/lang/Object;
    at impl.jilligal.HashVO.getVoarrayElt(Unknown Source)
    at impl.jilligal.HashVO.get_node(Unknown Source)
    at impl.jilligal.HashVO.long_value(Unknown Source)
    at samples.OneMillionObjects.readRandomValues(OneMillionObjects.java:48)
    at samples.OneMillionObjects.main(OneMillionObjects.java:128)

or JVM crash

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000102d93e10, pid=28283, tid=5891
#
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b05) (build 1.8.0_20-ea-b05)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b05 mixed mode bsd-amd64 )
# Problematic frame:
# V  [libjvm.dylib+0x393e10]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/glebreutov/TreeStruct/hs_err_pid28283.log
Compiled method (c1)   20119 1946       3       impl.jilligal.HashVO::getVoarrayElt (12 bytes)
 total in heap  [0x0000000103b9bf90,0x0000000103b9c468] = 1240
 relocation     [0x0000000103b9c0b0,0x0000000103b9c0f8] = 72
 main code      [0x0000000103b9c100,0x0000000103b9c2e0] = 480
 stub code      [0x0000000103b9c2e0,0x0000000103b9c388] = 168
 oops           [0x0000000103b9c388,0x0000000103b9c390] = 8
 metadata       [0x0000000103b9c390,0x0000000103b9c3b8] = 40
 scopes data    [0x0000000103b9c3b8,0x0000000103b9c3e8] = 48
 scopes pcs     [0x0000000103b9c3e8,0x0000000103b9c448] = 96
 dependencies   [0x0000000103b9c448,0x0000000103b9c458] = 16
 nul chk table  [0x0000000103b9c458,0x0000000103b9c468] = 16
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

Code that causes crash:

Getting object:

        hash_pool =
                offHeapService.createOffHeapPool(
                        new ObjectOffHeapPoolCreateParameterBuilder<HashVO>().
                                type(HashVO.class).
                                objectCount(10).
                                referenceType(ObjectPoolReferenceType.EAGER_REFERENCED).
                                build());
                HashVO hashVO = hash_pool.get();
                //hashVO.init(desired_element_count);
                hashVO.setArrayWrapper(offHeapService.createOffHeapPool(
                        new ArrayOffHeapPoolCreateParameterBuilder<HashVONode>().
                                type(HashVONode.class).
                                length(desired_element_count).
                                initializeElements(false).
                                build()));

                hashVO.setNodePool(offHeapService.createOffHeapPool(
                        new ObjectOffHeapPoolCreateParameterBuilder<HashVONode>().
                                type(HashVONode.class).
                                objectCount(desired_element_count).
                                referenceType(ObjectPoolReferenceType.EAGER_REFERENCED).
                                build()));

HashVO source can be found here: https://github.com/glebreutov/jilligal-test/blob/master/src/impl/jilligal/HashVO.java

Here you can find whole source of test https://github.com/glebreutov/jilligal-test/blob/master/src/samples/OneMillionObjects.java

Please tell if you need some additional info.
Thanks in advance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.