GraalVM: Run Programs Faster Anywhere :rocket:

Overview

GraalVM

https://graalvm.slack.com

GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Clojure, Kotlin, and LLVM-based languages such as C and C++.

The project website at https://www.graalvm.org describes how to get started, how to stay connected, and how to contribute.

Repository Structure

The GraalVM main source repository includes the components listed below. The documentation for each component includes developer instructions for the component.

  • GraalVM SDK contains long term supported APIs of GraalVM.

  • GraalVM compiler written in Java that supports both dynamic and static compilation and can integrate with the Java HotSpot VM or run standalone.

  • Truffle language implementation framework for creating languages and instrumentations for GraalVM.

  • Tools contains a set of tools for GraalVM languages implemented with the instrumentation framework.

  • Substrate VM framework that allows ahead-of-time (AOT) compilation of Java applications under closed-world assumption into executable images or shared objects.

  • Sulong is an engine for running LLVM bitcode on GraalVM.

  • GraalWasm is an engine for running WebAssembly programs on GraalVM.

  • TRegex is an implementation of regular expressions which leverages GraalVM for efficient compilation of automata.

  • VM includes the components to build a modular GraalVM image.

  • VS Code provides extensions to Visual Studio Code that support development of polyglot applications using GraalVM.

Get Support

Related Repositories

GraalVM allows running of following languages which are being developed and tested in related repositories with GraalVM core to run on top of it using Truffle and the GraalVM compiler. These are:

License

Each GraalVM component is licensed:

Comments
  • SubstrateVM on AArch64

    SubstrateVM on AArch64

    Current status:

    The state of this PR is in progress. Native-image command cannot produce any working binary for now.

    Testing

    For testing I use the simple hello world example from substrate/README.md quickstart:

    cd substratevm
    mx build
    
    echo "public class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World\"); } }" > HelloWorld.java
    $JAVA_HOME/bin/javac HelloWorld.java
    mx native-image HelloWorld -H:-SpawnIsolates
    ./helloworld
    

    The command mx native-image HelloWorld fails currently with following error:

    fatal error: com.oracle.svm.core.util.VMError$HostedError: currently only implemented on AMD64
    	at com.oracle.svm.core.util.VMError.guarantee(VMError.java:85)
    	at com.oracle.svm.jni.hosted.JNICallTrampolineMethod.lambda$createCustomCompileFunction$1(JNICallTrampolineMethod.java:111)
    	at com.oracle.svm.hosted.code.CompileQueue.doCompile(CompileQueue.java:883)
    	at com.oracle.svm.hosted.code.CompileQueue$CompileTask.run(CompileQueue.java:259)
    	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:174)
    	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
    
    feature oracle-emp oca-signed native-image 
    opened by sanzinger 140
  • [native-image] Startup time of native compiled with graalvm 20.1-dev is noticably slower than 19.3.0 on macOS

    [native-image] Startup time of native compiled with graalvm 20.1-dev is noticably slower than 19.3.0 on macOS

    Given a simple class like:

    public class Foo {
    
        public static void main(String [] args) {
            System.out.println("Hello");
        }
    }
    
    $ javac Foo.java
    
    $ brew install Tenzer/tap/multitime
    
    $ export GRAALVM_HOME=/Users/borkdude/Downloads/graalvm-ce-java8-19.3.0/Contents/Home
    $GRAALVM_HOME/bin/native-image Foo --no-server
    $ multitime -n100 ./foo
    
    ===> multitime results
    1: ./foo
                Mean        Std.Dev.    Min         Median      Max
    real        0.007       0.001       0.005       0.008       0.009
    user        0.002       0.000       0.002       0.002       0.003
    sys         0.002       0.000       0.001       0.002       0.004
    
    $ export GRAALVM_HOME=/Users/borkdude/Downloads/graalvm-ce-java8-20.1.0-dev/Contents/Home
    $GRAALVM_HOME/bin/native-image Foo --no-server
    $ multitime -n100 ./foo
    
    ===> multitime results
    1: ./foo
                Mean        Std.Dev.    Min         Median      Max
    real        0.015       0.001       0.011       0.015       0.016
    user        0.007       0.001       0.005       0.007       0.008
    sys         0.005       0.000       0.004       0.005       0.006
    

    I noticed this when trying out 20.1-dev jdk8 with babashka, a scripting tool made with GraalVM. On GraalVM 19.3.0 java8 it has a startup time of around 14ms, but when I was trying GraalVM 20.1-dev it became 24ms which is 10ms slower.

    $ export GRAALVM_HOME=/Users/borkdude/Downloads/graalvm-ce-java8-19.3.0/Contents/Home
    $ script/compile 
    $ multitime -n100 ./bb '(System/getProperty "java.vm.version")'
    
    ===> multitime results
    1: ./bb "(System/getProperty \"java.vm.version\")"
                Mean        Std.Dev.    Min         Median      Max
    real        0.014       0.001       0.012       0.014       0.016
    user        0.005       0.000       0.004       0.005       0.006
    sys         0.006       0.001       0.004       0.006       0.008
    
    $ export GRAALVM_HOME=/Users/borkdude/Downloads/graalvm-ce-java8-20.1.0-dev/Contents/Home
    $ script/compile 
    $ multitime -n100 ./bb '(System/getProperty "java.vm.version")'
    
    ===> multitime results
    1: ./bb "(System/getProperty \"java.vm.version\")"
                Mean        Std.Dev.    Min         Median      Max
    real        0.024       0.002       0.018       0.024       0.026
    user        0.011       0.001       0.008       0.011       0.011
    sys         0.010       0.001       0.007       0.010       0.012
    

    To build babashka:

    $ git clone https://github.com/borkdude/babashka --recursive
    

    Install lein, a Clojure build tool.

    Set GRAALVM_HOME to either 19 or 20 with java8.

    Then run script/compile (on linux or macos).

    This will produce a bb executable.

    bug native-image 
    opened by borkdude 67
  • Revise tagging mechanism. Add the notion of @ProvidedTags.

    Revise tagging mechanism. Add the notion of @ProvidedTags.

    Since there was bad feedback on the SourceSection#hasTag solution, I tried to come up with a more flexible approach to tagging. I changed to a protected method Node#isTaggedWith(String). So its now up to the language how tagging is implemented.

    Also new and noteworthy:

    • ProvidedTags to specify for a language which tags are provided by a language. (isTaggedWith is never called with other tags than that)
    • RequiredTags to specify which tags are required by an instrument. One cannot create queries for tags they do not require anymore.
    • PolyglotEngine#Instrument#isCompatibleWith(Language) to check wheter an instrument is compatible to a language. (contains all tags)
    • Instrumenter#isNodeTaggedWith(Node, String) to query other nodes not instrumented for a specific tag.

    Since the behavior for provided and required tags is incompatible with the original version, I've introduced a temporary compatibility mode flag -Dtruffle.instrumentation.compatibility=true. For a language to verify that it is compatible to the new required/provided tags schema you need to run all you tests with compatibility set to false.

    Also please note that in compatibility mode this change is fully compatible also SourceSection#hasTag is still supported.

    @mickjordan @chrisseaton @woess please review for use in language @mlvdv @jtulach please review for everything else.

    @mlvdv As you requested: here is a sketch to display all tags of a node:

        public static void displayAllTags(PolyglotEngine engine, Instrumenter instrumenter, Node node) {
            Set<String> allTags = new HashSet<>();
            for (Instrument instrument : engine.getInstruments().values()) {
                allTags.addAll(instrument.getRequiredTags());
            }
            for (Language language : engine.getLanguages().values()) {
                allTags.addAll(language.getProvidedTags());
            }
    
            for (String tag : allTags) {
                if (instrumenter.isNodeTaggedWith(node, tag)) {
                    System.out.println(String.format("Node %s is tagged with %s.", node, tag));
                }
            }
        }
    
    feature oracle-emp accept 
    opened by chumer 67
  • Micronaut support for SubstrateVM and native image

    Micronaut support for SubstrateVM and native image

    I have been investigating support for SubstrateVM and the nativeimage tool for Micronaut http://micronaut.io/

    Micronaut produces largely reflection free DI and AOP, however does allow soft loading of classes.

    Currently only one error occurs when preparing the image, which is probably a matter of supplying a correct reflection.json:

    RecomputeFieldValue.ArrayIndexScale automatic substitution failed. The automatic substitution registration was attempted because a call to sun.misc.Unsafe.arrayIndexScale(Class) was detected in the static initializer of io.micronaut.caffeine.cache.UnsafeRefArrayAccess. Add a RecomputeFieldValue.ArrayIndexScale manual substitution for io.micronaut.caffeine.cache.UnsafeRefArrayAccess. 
    

    More fundamentally however, we rely on ServiceLoader.load(..) and classLoader.getResources() in a few places and these seem to be unimplemented? Calls to getClass().getClassLoader() return null

    Is there an alternative way to load resources other than through the classloader? Can we provide an alternative to ServiceLoader.load(..)?

    We could certainly abstract the strategies for loading resources and service descriptors if there was an alternative way to get at these and a way to detect you are running on SubstrateVM (is there a way?)

    native-image 
    opened by graemerocher 58
  • How to compile VM suite?

    How to compile VM suite?

    Hi,

    I have tried to compile VM suite according to https://github.com/oracle/graal/tree/master/vm#base-graalvm and this is what I get:

    marty@marty-GB-BXi7-5500:~/work/programs/graal-projects/graal/vm$ mx --dy /substratevm,/tools,sulong,/graal-nodejs build
    Cloning https://github.com/oracle/js.git revision 83b9324bf510ccc9a1a12b35900630fe29079a67 to /home/marty/work/programs/graal-projects/js with Git
    Cloning https://github.com/oracle/js.git to /home/marty/work/programs/graal-projects/js with Git
    Cloning into '/home/marty/work/programs/graal-projects/js'...
    Username for 'https://github.com': ^C
    

    so it seems that https://github.com/oracle/js.git is private/old repository. Is that correct?

    My next attempt was to remove /graal-nodejs, then I get:

    marty@marty-GB-BXi7-5500:~/work/programs/graal-projects/graal/vm$ mx --dy /substratevm,/tools,sulong build
    build: Checking SubstrateVM requirements for building ...
    Compiling org.graalvm.component.installer.test with javac-daemon... [/home/marty/work/programs/graal-projects/graal/vm/mxbuild/src/org.graalvm.component.installer.test/bin/org/graalvm/component/installer/ChunkedConnection.class does not exist]
    /home/marty/work/programs/graal-projects/graal/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/FileDownloaderTest.java:44: error: package sun.net does not exist
    import sun.net.ConnectionResetException;
                  ^
    /home/marty/work/programs/graal-projects/graal/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/FileDownloaderTest.java:259: error: cannot find symbol
            conn.readException = new ConnectionResetException();
                                     ^
      symbol:   class ConnectionResetException
      location: class FileDownloaderTest
    2 errors
    
    Compiling org.graalvm.component.installer.test with javac-daemon failed
    1 build tasks failed
    

    Am I doing something wrong?

    Regards, Martin

    opened by MartyIX 57
  • no awt in java.library.path

    no awt in java.library.path

    hare is my project https://github.com/abamoshe/ConnectWise_portable/releases/tag/0.0.0 im running native-image -jar ConnectWise.jar --no-fallback -H:NativeLinkerOption=prefs.lib and on runtime i get this error:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no awt in java.library.path
            at com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary(NativeLibrarySupport.java:131)
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:228)
            at java.lang.Runtime.loadLibrary0(Runtime.java:830)
            at java.lang.Runtime.loadLibrary(Runtime.java:238)
            at java.lang.System.loadLibrary(System.java:352)
            at java.awt.Toolkit$3.run(Toolkit.java:1395)
            at java.awt.Toolkit$3.run(Toolkit.java:1393)
            at java.security.AccessController.doPrivileged(AccessController.java:83)
            at java.awt.Toolkit.loadLibraries(Toolkit.java:1392)
            at java.awt.Toolkit.<clinit>(Toolkit.java:1425)
            at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
            at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
            at java.awt.SystemTray.addNotify(SystemTray.java:503)
            at java.awt.SystemTray.<init>(SystemTray.java:150)
            at java.awt.SystemTray.initializeSystemTrayIfNeeded(SystemTray.java:522)
            at java.awt.SystemTray.getSystemTray(SystemTray.java:185)
            at com.aba.pconnectwise.Launcher.addTrayIcon(Launcher.java:24)
            at com.aba.pconnectwise.Launcher.main(Launcher.java:19)
    

    (the -H:NativeLinkerOption=prefs.lib is becose of https://github.com/oracle/graal/issues/2363#issuecomment-619426179 i'v also downloaded the dev version to avoid this https://github.com/oracle/graal/issues/2363#issuecomment-664512773)

    bug native-image 
    opened by abamoshe 56
  • [native-image] Getting bad address when writing to socket (PosixJavaNIOSubstitutions)

    [native-image] Getting bad address when writing to socket (PosixJavaNIOSubstitutions)

    I'm trying to make a CLI tool for accessing a grpc API run using native-image. It's using grpc java libs, and hence grpc-netty. I've managed to make an executable, and via a reflection config file I dealt with netty's ReflectiveChannelFactory. I can see that I can actually create the grpc client and see a few TCP packets between my client and server. So far so good.

    When I actually try to make an API call I get an error relating to a failed write to the socket. I tried both on OSX and Linux, same exact outcome.

    The stacktrace is:

    Exception in thread "main" java.lang.reflect.InvocationTargetException
    	at java.lang.Throwable.<init>(Throwable.java:310)
    	at java.lang.Exception.<init>(Exception.java:102)
    	at java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:89)
    	at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72)
    	at com.oracle.svm.reflect.proxies.Proxy_1_main_main.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:199)
    	at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
    Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
    	at java.lang.Throwable.<init>(Throwable.java:287)
    	at java.lang.Exception.<init>(Exception.java:84)
    	at java.lang.RuntimeException.<init>(RuntimeException.java:80)
    	at io.grpc.StatusRuntimeException.<init>(StatusRuntimeException.java:41)
    	at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:221)
    	at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:202)
    	at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:131)
    	at permafrost.api.PermafrostGrpc$PermafrostBlockingStub.health(PermafrostGrpc.java:1779)
    	at permafrost.client.PermafrostClientGrpc._health(client.clj:36)
    	at permafrost.client$health.invokeStatic(client.clj:21)
    	at permafrost.client$health.invoke(client.clj:19)
    	at permafrost.cli.health$health.invokeStatic(health.clj:22)
    	at permafrost.cli.health$health.invoke(health.clj:20)
    	at permafrost.cli.health$fn__1228.invokeStatic(health.clj:54)
    	at permafrost.cli.health$fn__1228.invoke(health.clj:47)
    	at permafrost.cli.main$dispatch_handler.invokeStatic(main.clj:92)
    	at permafrost.cli.main$dispatch_handler.invoke(main.clj:80)
    	at permafrost.cli.main$process_cmd.invokeStatic(main.clj:128)
    	at permafrost.cli.main$process_cmd.invoke(main.clj:104)
    	at permafrost.cli.main$_main.invokeStatic(main.clj:154)
    	at permafrost.cli.main$_main.doInvoke(main.clj:138)
    	at clojure.lang.RestFn.applyTo(RestFn.java:137)
    	at permafrost.cli.main.main(Unknown Source)
    	... 4 more
    Caused by: java.io.IOException: Bad address
    	at java.lang.Throwable.<init>(Throwable.java:265)
    	at java.lang.Exception.<init>(Exception.java:66)
    	at java.io.IOException.<init>(IOException.java:58)
    	at com.oracle.svm.core.posix.PosixJavaNIOSubstitutions.throwIOExceptionWithLastError(PosixJavaNIOSubstitutions.java:236)
    	at com.oracle.svm.core.posix.PosixJavaNIOSubstitutions.convertLongReturnVal(PosixJavaNIOSubstitutions.java:304)
    	at com.oracle.svm.core.posix.PosixJavaNIOSubstitutions.convertLongReturnVal(PosixJavaNIOSubstitutions.java:285)
    	at com.oracle.svm.core.posix.PosixJavaNIOSubstitutions$Target_sun_nio_ch_FileDispatcherImpl.writev0(PosixJavaNIOSubstitutions.java:1352)
    	at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51)
    	at sun.nio.ch.IOUtil.write(IOUtil.java:148)
    	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504)
    	at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:418)
    	at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:934)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:360)
    	at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:901)
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1376)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:768)
    	at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:749)
    	at io.netty.handler.codec.http2.Http2ConnectionHandler.flush(Http2ConnectionHandler.java:201)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:768)
    	at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:749)
    	at io.grpc.netty.ProtocolNegotiators$AbstractBufferingHandler.writeBufferedAndRemove(ProtocolNegotiators.java:585)
    	at io.grpc.netty.ProtocolNegotiators$BufferUntilChannelActiveHandler.channelActive(ProtocolNegotiators.java:681)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:213)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:199)
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:192)
    	at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:64)
    	at io.netty.handler.codec.http2.Http2ConnectionHandler.channelActive(Http2ConnectionHandler.java:421)
    	at io.grpc.netty.AbstractNettyHandler.channelActive(AbstractNettyHandler.java:71)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:213)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:199)
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:192)
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1402)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:213)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:199)
    	at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:921)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:311)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:341)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:545)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:499)
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
    	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    	at java.lang.Thread.run(Thread.java:748)
    	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:222)
    	at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eposix_002ethread_002ePosixJavaThreads_002epthreadStartRoutine_0028com_002eoracle_002esvm_002ecore_002eposix_002ethread_002ePosixJavaThreads_0024ThreadStartData_0029(generated:0)
    

    I'm feeling close to getting it all to work, but stumped at this point now. I'm hoping that more experienced eyes may make something out of why the writev() fails here?

    As I said, on connecting the grpc client to the server I can see a few packets of negotiations being sent so it seems to have the "ability to write to socket" working somewhere inside the image..

    Very encouraged by the startup time after using native-image! Makes clojure cli tools nice to use.

    Thanks!

    native-image 
    opened by sundbp 56
  • Debug info prototype

    Debug info prototype

    This PR is for an initial prototype for the native image debug info implementation. It is really intended for discussion rather than to be pulled into the main repo. However, it does actually implement support for gdb on Linux/x86_64 (see DEBUGINFO.md for details of how to generate and use debug info and what features are supported).

    The patch contains 3 main commits of which the second is the actual code that generates the DWARF debug records. The first patch defines a set of Graal-neutral interfaces defining an API that allow the Native Image Generator to communicate the necessary details of compiled code to an object file. The third patch modifies the Native Image Generator to drive generation of debug info using that API.

    Work on a Windows implementation is progressing and should be able to rely on employing the same Graal-neutral interface API. AArch64 support still needs testing (it will probably require only a little bit of tweaking to get stack backtraces working).

    I'd be very grateful for feedback on all aspects of the implementation but clearly the most important things to look at form the point of view of the rest of the project are patches 1 and 3.

    n.b. the interface API includes place holders for notifying details of types and heap data elements to the debug generator. Fleshing out this API and implementing associated debug info generation is the next task in hand.

    oracle-emp oca-signed native-image-debuginfo 
    opened by adinn 53
  • [GR-34179] Upgrade CE debug info feature to provide information about Java types for Windows/PECOFF

    [GR-34179] Upgrade CE debug info feature to provide information about Java types for Windows/PECOFF

    This PR adds type information to the CodeView 4 debug information (See PR #2396). It is related to issue #2986, but is targeted to Windows and Visual Studio.

    This PR is based off (and highly dependant on) the work in PR #3046.

    With this patch, memory can be examined from the Visual Studio or WinDbg command line and cast to Java types as laid out by the Graal compiler. Static member variables can be referenced directly.

    Caveats:

    • Pointer types for instance members in the presence of isolates are not yet implemented, as there appears to be no way to express a pointer that is an offset from r14 in CodeView. I will continue to research this, but at this time, this implementation works best if isolates are disabled.
    • As there is no local variable information added by this PR, users must manually cast registers to pointers; for example (java_lang_String*)(rdx).

    I recommend @adinn as a first reviewer for this PR, as it is based on his debug type PR.

    oca-signed OCA Verified 
    opened by stooke 47
  • Produce debug entries for inlined methods

    Produce debug entries for inlined methods

    Known Issues

    • Given two call-chains:
      1. foo->bar->baz
      2. foo->bar->buz we could create a "concrete inlined instance tree" (per the DWARF spec) like this:
       foo
        |
       bar
        |
       / \
      /   \
    baz   buz
    

    instead we generate two separate trees, resulting in more DIEs (Debug Information Entries).

    • Ideally an DW_TAG_inlined_subroutine would reference (through DW_AT_abstract_origin) the DW_TAG_subprogram defining the corresponding subprogram even if it's declared in a different compilation unit. There are cases however where when creating the DW_TAG_inlined_subroutine the corresponding DW_TAG_subprogram has not been created yet (even worse the corresponding compilation unit might not have been created yet). To overcome this issue our current approach creates partial DW_TAG_subprogram entries in the compilation unit where the inlining happens. This however comes at the cost of having more DIEs.

    Before this PR hello.hello with debug symbols is 10MB After this PR hello.hello with debug symbols becomes 38MB Without debug symbols hello.hello is 7.9MB

    Closes #2701

    oca-signed 
    opened by zakkak 46
  • [native-image] Error loading a referenced type: java.lang.IllegalAccessError

    [native-image] Error loading a referenced type: java.lang.IllegalAccessError

    I get this error when building a native-image from an uber jar, the detailed version of the error is as follows:

    Warning: RecomputeFieldValue.ArrayBaseOffset automatic substitution failed. The automatic substitution registration was attempted because a call to sun.misc.Unsafe.arrayBaseOffset(Class) was detected in the static initializer of org.bytedeco.javacpp.indexer.UnsafeRaw. Detailed failure reason(s): Could not determine the field where the value produced by the call to sun.misc.Unsafe.arrayBaseOffset(Class) for the array base offset computation is stored. The call is not directly followed by a field store or by a sign extend node followed directly by a field store. 
    
    Error: Error loading a referenced type: java.lang.IllegalAccessError: tried to access class org.bytedeco.javacpp.indexer.Raw from class org.bytedeco.javacpp.indexer.BooleanIndexer
    Detailed message:
    Trace: 
    	at parsing org.bytedeco.javacpp.indexer.BooleanIndexer.create(BooleanIndexer.java:88)
    Call path from entry point to org.bytedeco.javacpp.indexer.BooleanIndexer.create(BooleanPointer, long[], long[], boolean): 
    	at org.bytedeco.javacpp.indexer.BooleanIndexer.create(BooleanIndexer.java:87)
    	at org.bytedeco.javacpp.indexer.BooleanIndexer.create(BooleanIndexer.java:77)
    	at org.bytedeco.javacpp.indexer.BooleanIndexer.create(BooleanIndexer.java:51)
    	at org.nd4j.linalg.api.buffer.BaseDataBuffer.<init>(BaseDataBuffer.java:698)
    	at org.nd4j.linalg.api.buffer.BaseDataBuffer.<init>(BaseDataBuffer.java:635)
    	at org.nd4j.linalg.api.buffer.LongBuffer.<init>(LongBuffer.java:45)
    	at org.nd4j.linalg.cpu.nativecpu.CpuTADManager.getTADOnlyShapeInfo(CpuTADManager.java:93)
    	at org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner.exec(NativeOpExecutioner.java:314)
    	at org.nd4j.linalg.api.ndarray.BaseNDArray.equalsWithEps(BaseNDArray.java:5209)
    	at org.nd4j.linalg.api.ndarray.BaseNDArray.equals(BaseNDArray.java:5245)
    	at com.oracle.svm.jni.JNIJavaCallWrappers.jniInvoke_VA_LIST:Ljava_lang_Object_2_0002eequals_00028Ljava_lang_Object_2_00029Z(generated:0)
    
    

    Is it expecting the class to be opened via the reflect-config.json configuration, which isn't clear from the error message?

    The line of code that's causing the error is over here: https://github.com/bytedeco/javacpp/blob/master/src/main/java/org/bytedeco/javacpp/indexer/BooleanIndexer.java#L87.

    Here is the source to org.bytedeco.javacpp.indexer.Raw.java

    opened by neomatrix369 46
  • Fatal error when building native image with GraalVM 22.3.0

    Fatal error when building native image with GraalVM 22.3.0

    Getting following fatal error while building native image with the JAR added here

    Generating executable with Native image
    ========================================================================================================================
    GraalVM Native Image: Generating 'transaction_native_image' (executable)...
    ========================================================================================================================
    [1/7] Initializing...                                                                                    (9.7s @ 0.46GB)
     Version info: 'GraalVM 22.3.0 Java 11 CE'
     Java version info: '11.0.17+8-jvmci-22.3-b08'
     C compiler: gcc (linux, x86_64, 11.3.0)
     Garbage collector: Serial GC
     2 user-specific feature(s)
     - com.oracle.svm.thirdparty.gson.GsonFeature
     - io.ballerina.stdlib.crypto.svm.BouncyCastleFeature
    [2/7] Performing analysis...  []                                                                        (10.7s @ 1.21GB)
       3,898 (73.06%) of  5,335 classes reachable
       5,974 (35.44%) of 16,858 fields reachable
      15,771 (64.92%) of 24,293 methods reachable
         216 classes,     0 fields, and     0 methods registered for reflection
    
    Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing gabilan.transaction_native_image/0.$_init.$lambda$main$(java.lang.Object[]) 
    Parsing context:
       at gabilan.transaction_native_image.0.$_init.$lambda$main$(transaction_native_image)
       at gabilan.transaction_native_image.0.$_init$$Lambda$762/0x00000007c205b040.apply(Unknown Source)
       at io.ballerina.runtime.internal.scheduling.SchedulerItem.execute(SchedulerItem.java:54)
       at io.ballerina.runtime.internal.scheduling.Scheduler.run(Scheduler.java:324)
       at io.ballerina.runtime.internal.scheduling.Scheduler.runSafely(Scheduler.java:291)
       at io.ballerina.runtime.internal.scheduling.Scheduler$$Lambda$844/0x00000007c208d040.run(Unknown Source)
       at java.lang.Shutdown.runHooks(Shutdown.java:130)
       at java.lang.Shutdown.shutdown(Shutdown.java:186)
       at com.oracle.svm.core.jdk.RuntimeSupport.shutdown(RuntimeSupport.java:154)
    
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:153)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:104)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:83)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraph(MethodTypeFlow.java:65)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultStaticInvokeTypeFlow.update(DefaultStaticInvokeTypeFlow.java:64)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:488)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
            at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
            at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
            at java.base/java.util.concurrent.ForkJoinPool.awaitQuiescence(ForkJoinPool.java:2984)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.complete(CompletionExecutor.java:243)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis.doTypeflow(PointsToAnalysis.java:541)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis.finish(PointsToAnalysis.java:529)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.AbstractAnalysisEngine.runAnalysis(AbstractAnalysisEngine.java:143)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:745)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:578)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:535)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:580)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128)
    Caused by: org.graalvm.compiler.debug.GraalError: Frame states being merged are incompatible: mismatch in rethrowException flag
     This frame state: [locals: [1,600,601,602,603,879,605,606,607,608,#,609,610,16,37295,613,614,615,616,617,_,619,620,37297,622,623,624,625,626,627,628,629,630,631,37298,37299,37300,37301,37302,37303,37304,37305,37306,_,_,37308,37309,37310,_,_,_,645,_,646,647,#,648,#,649,650,651,652,_,_,_,654,_,_,_,_,_,_] stack: [37366] locks: [] rethrowException]
    Other frame state: [locals: [1,600,601,602,603,38864,605,606,607,608,#,609,610,38865,38866,613,614,615,616,617,_,619,620,38867,622,623,624,625,626,627,628,629,630,631,38866,38868,38869,38870,38871,38872,38873,38874,38875,_,_,38866,38876,38877,_,_,_,645,_,646,647,#,648,#,649,650,651,652,_,_,_,654,_,_,_,_,_,_] stack: [38878] locks: []]
    Parser context: gabilan.transaction_native_image.0.main.main(main.bal:0) [bci: 2927, intrinsic: false]
    2927: ldc           #255        // 1
    2929: istore        13
    2931: getstatic     #50         // gabilan.transaction_native_image/0.constants.$_string_constants.$bString8:io.ballerina.runtime.api.values.BString
    2934: astore        5
    2936: aload         18
    
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.FrameStateBuilder.checkCompatibleWith(FrameStateBuilder.java:399)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.FrameStateBuilder.merge(FrameStateBuilder.java:431)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.createTarget(BytecodeParser.java:3133)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.createTarget(BytecodeParser.java:3033)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.createExceptionDispatch(BytecodeParser.java:3288)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3188)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1138)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1030)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:97)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:84)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:446)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:135)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:685)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.lookupEncodedGraph(InlineBeforeAnalysis.java:180)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.doInline(PEGraphDecoder.java:1162)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.tryInline(PEGraphDecoder.java:1145)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.trySimplifyInvoke(PEGraphDecoder.java:1003)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.handleInvoke(PEGraphDecoder.java:957)
            at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.GraphDecoder.processNextNode(GraphDecoder.java:817)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.processNextNode(InlineBeforeAnalysis.java:240)
            at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.GraphDecoder.decode(GraphDecoder.java:548)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.decode(PEGraphDecoder.java:833)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysis.decodeGraph(InlineBeforeAnalysis.java:98)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:179)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:349)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:93)
            ... 19 more
    ------------------------------------------------------------------------------------------------------------------------
                            1.1s (5.1% of total time) in 16 GCs | Peak RSS: 2.35GB | CPU load: 4.75
    ========================================================================================================================
    Failed generating 'transaction_native_image' after 20.9s.
    Error: Image build request failed with exit status 1
    error: unable to create native image
    
    bug native-image 
    opened by gabilang 0
  • [GR-43397] Provide a way to get the full list of packages/classes with their related size

    [GR-43397] Provide a way to get the full list of packages/classes with their related size

    It would be useful to be able to see the full list of packages/classes with their related size in addition to the subset we get at the end of each build (see for example https://github.com/oracle/graal/pull/5705#issue-1520637684).

    feature 
    opened by sdeleuze 0
  • [GR-43385] Group by JAR file in code area breakdown.

    [GR-43385] Group by JAR file in code area breakdown.

    This PR extends the code area breakdown with JAR file groups. This makes it easier for users to understand what part of their code base and external dependencies are contributing the most to the code area. It also reduces the number of possible entries because JARs often contain multiple packages.

    For a Spring starter project, the result looks like this:

    Top 10 origins of code area:                                Top 10 object types in image heap:
       1.25MB spring-core-6.0.3.jar                                4.21MB byte[] for code metadata
       1.09MB svm.jar                                              2.21MB java.lang.String
       1.01MB java.util                                            2.09MB java.lang.Class
     930.83KB spring-boot-3.0.1.jar                                1.77MB byte[] for general heap data
     734.60KB spring-beans-6.0.3.jar                               1.75MB byte[] for java.lang.String
     666.37KB spring-expression-6.0.3.jar                        772.49KB com.oracle.svm.core.hub.DynamicHubCompanion
     580.72KB logback-core-1.4.5.jar                             513.00KB int[][]
     575.58KB java.lang.invoke                                   425.35KB java.lang.String[]
     488.58KB c.s.org.apache.xerces.internal.impl.xs.traversers  417.00KB byte[] for reflection metadata
     479.65KB java.lang                                          356.91KB java.util.HashMap$Node
      10.91MB for 196 more origins                                 3.47MB for 1831 more object types
    

    Using GraalVM 22.3, so without this PR, it looks like this:

    Top 10 packages in code area:                               Top 10 object types in image heap:
     1.56MB com.oracle.svm.core.code                             4.57MB byte[] for code metadata
     1.17MB java.util                                            2.02MB byte[] for java.lang.String
    784.75KB java.lang.invoke                                     1.75MB java.lang.String
    723.67KB java.lang                                            1.55MB java.lang.Class
    574.36KB java.util.concurrent                                 1.53MB byte[] for general heap data
    542.24KB java.io                                            440.97KB byte[] for reflection metadata
    511.95KB java.text                                          427.83KB com.oracle.svm.core.hub.DynamicHubCompanion
    502.09KB com.sun.crypto.provider                            386.75KB java.util.concurrent.ConcurrentHashMap$Node
    435.63KB com.sun.org.apache.xerces.internal.impl            264.97KB java.util.HashMap$Node
    417.55KB jdk.internal.org.objectweb.asm                     259.77KB java.lang.Object[]
    15.89MB for 410 more packages                                2.61MB for 1811 more object types
    
    OCA Verified 
    opened by graalvmbot 0
  • Add Java monitor inflation JFR event

    Add Java monitor inflation JFR event

    This pull request adds the jdk.JavaMonitorInflate JFR event.

    In Hotspot, object monitors can be inflated and deflated. Inflation is the slow path and it happens when there is contention for the monitor, among other reasons. Once there are no longer threads waiting for the monitor, the monitor is deflated and the fast path can be used again. In SVM, inflation essentially happens whenever a JavaMonitor is lazily created for an object. Deflation doesn't ever happen. So in SVM this event can only help describe how often JavaMonitors are being created and why (the "cause"), it doesn't provide insight into how often the slow path is taken (because it's always taken). In the future, if SVM monitors become more complex like in hotspot, then this event would become more useful.

    OCA Verified 
    opened by roberttoyonaga 0
Releases(idealgraphvisualizer-543)
Owner
Oracle
Open Source at Oracle
Oracle
This repository contains Java programs to become zero to hero in Java. Programs related to each and every concep are present from easy to intermidiate level.

Learn Java Programming In this repository you will find topic wise programs of java from basics to intermediate. This follows topic wise approach that

Sahil Batra 15 Oct 9, 2022
Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners.

Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners. If You Have any doubt or query you can ask me here or you can also ask me on My LinkedIn Profile

Shaikh Minhaj 3 Nov 8, 2022
:rocket: Lightning fast and elegant mvc framework for Java8

Based on Java8 + Netty4 to create a lightweight, high-performance, simple and elegant Web framework ?? Spend 1 hour to learn it to do something intere

Blade Framework 5.7k Dec 28, 2022
:rocket: Lightning fast and elegant mvc framework for Java8

Based on Java8 + Netty4 to create a lightweight, high-performance, simple and elegant Web framework ?? Spend 1 hour to learn it to do something intere

Blade Framework 5.7k Jan 5, 2023
Simple AnimationUtil using Easing functions. Can be used anywhere, Hacked-Client, Mods, etc..

AnimationUtil Simple AnimationUtil using Easing functions. Can be used anywhere, Hacked-Client, Mods, etc.. Render example > https://gyazo.com/780b5d8

null 71 Jan 8, 2023
CODE ANYWHERE – MENTORIA #4 | Projetos Ágeis com Scrum

Scrum CODE ANYWHERE – MENTORIA #4 | Projetos Ágeis com Scrum! Avanade DIO - Code Anywhere Mentoria #1 | Pensando Orientado a Objetos na prática Mentor

Code Anywhere - DIO & AVANADE 20 Sep 12, 2021
A Mixin framework for Spigot/Bukkit that allows you to hook custom event anywhere

A Mixin framework for Spigot/Bukkit that allows you to hook custom event anywhere. Start coding your advanced plugins today!

DragonCommissions 14 Nov 30, 2022
Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

OkHttp See the project website for documentation and APIs. HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP

Square 43.4k Jan 9, 2023
Spring Native provides beta support for compiling Spring applications to native executables using GraalVM native-image compiler.

Spring Native provides beta support for compiling Spring applications to native executables using GraalVM native-image compiler.

Spring Projects Experimental 2.8k Jan 6, 2023
Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

OkHttp See the project website for documentation and APIs. HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP

Square 43.4k Jan 5, 2023
Sample serverless application written in Java compiled with GraalVM native-image

Serverless GraalVM Demo This is a simple serverless application built in Java and uses the GraalVM native-image tool. It consists of an Amazon API Gat

AWS Samples 143 Dec 22, 2022
A sample repo to help you run automation test in incognito mode in Java-selenium on LambdaTest. Run your Java Selenium tests on LambdaTest platform.

How to run automation test in incognito mode in Java-selenium on LambdaTest Prerequisites Install and set environment variable for java. Windows - htt

null 12 Jul 13, 2022
Simpler, better and faster Java bean mapping framework

Orika ! NEW We are pleased to announce the release of Orika 1.5.4 ! This version is available on Maven central repository What? Orika is a Java Bean m

null 1.2k Jan 6, 2023
A Minecraft Mod for Fabric which aims to make Block Entity rendering faster and more customizable with almost no compromises.

Enhanced Block Entities EBE is a 100% client side mod for Minecraft on the Fabric mod loader which aims to increase the performance of block entity re

null 151 Dec 30, 2022
Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low latency stream processing and data analysis framework. Milliseconds latency and 10+ times faster than Flink for complicated use cases.

Table-Computing Welcome to the Table-Computing GitHub. Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low la

Alibaba 34 Oct 14, 2022
An open source SQL database designed to process time series data, faster

English | 简体中文 | العربية QuestDB QuestDB is a high-performance, open-source SQL database for applications in financial services, IoT, machine learning

QuestDB 9.9k Jan 1, 2023
A library for IDEs and Code Editors to compile java projects faster dynamically

A library for IDEs and Code Editors to compile java projects faster dynamically

omega ui 2 Feb 22, 2022
A Minecraft Fabric mod to make crafting with the recipe book faster

OneClickCrafting This mod is clientside only. After selecting a recipe in the recipe book, the client with shift-click the crafted item from the resul

BreadMoirai 4 Jun 2, 2022
Caches datapack- and server resources to make world creation faster.

antiresourcereload Caches datapack- and server resources to make world creation faster. Legalisation Status Legal (1.0.2) Description I found out abou

Wurgo 13 Nov 18, 2022