User Tools

Site Tools


Sidebar


Menu



notatki:informatyka:java

Java

Compilers and VM

Other

JVM and .Net languages

List all JVM or almost all is available here, or here

Performance Tuning

Garbage Collection

Other JVM Languages

Math projects

  • EJML - Efficient Java Matrix Library - one of the most efficient matrix java libraries
  • ojAlgo - Oj Algorithms Java toolkit including matrix and optimization tooks, one of the most efficient!
  • MTJ - matrix toolkits java
  • Colt - set of Java mathematical packages
    • Jama - MathWorks basic java matrix library
    • Jampack - A Java paclage for matrix computation developed by Mathematical and Computations Sciences Division, NIST
  • NetLib/BLAS - Basic Linear Algebra Subprograms of NetLib
  • JBLAS - Linear Algebra for Java
  • JEP - Jep is a Java library for parsing and evaluating mathematical expressions.
  • Commons-Math - The Apache Commons Mathematics Library
  • Matlab Control - Access to Matlab session from independent JVM session by the use of RMI
  • Java Matlab - three ways to control Matlab from Java session

Math projects

Java Grids

Java Grids Comparison

Java Grids Frameworks

Java HPC

Java Chart/Graphics presentation

Game frameworks

  • libGDX - a cross-platform game development library written in Java, with some JNI code for performance hungry sections.It supports HTML5, Java, Android, iOS, OpenGL ES

Books/Materials

Some Java projects

  • Java to .Net
  • Java DB - pure Java Database
  • Office integration
    • JExcelApi - API for MS Excel documents
    • XLLoop - API to integrate Java functions into Excel documents
    • ODFDOM - the OpenDocument Java Library
    • JOffice - Pure Java based office - recently only alpha version is avaliable
  • Media
    • JMF - Java Media Framework
    • JMusic - Music composition in Java
  • GUI
  • Java Launchers:
    • Launch4j - creates a launching program for your java program (ex. exe file for windows)
    • WinRun4J - creates a launching program for your java program (ex. exe file for windows)
  • Java Cache projects - collection of java os. projects for object caching
  • Jakarta - a collection of various Java libraries (ex. Math, Net, XML etc.)
  • RESTlet - REST services for Java
  • CMU Sphinx - speach recognition system in Java
  • Google-Guava - programing in Java using predicates logic (functional programming in Java)
  • Orekit - A free low level space dynamics library
  • ROSjava - ROS is an open-source, meta-operating system for your robots
    • ROS - Robot Operating System - libraries and tools to help software developers create robot applications.
  • xStream - simple tool for Object 2 XML and XML to object mapping and transformation
  • Lombok - a set of annotation like in C# for autogeneration of setters, getters, equals, hascode, etc.

Java Networking

Standard Technology
SOAP JAX-WS
REST JAX-RS
XML JAXB
JSON ???
  • Enunciate - common framework for creating SOAP, REST, etc. at once
  • Apache commons - networking tools for the following applications/protocols: FTP/FTPS, NNTP, SMTP, POP3, Telnet, TFTP, Finger, Whois, rexec/rcmd/rlogin, ime (rdate) and Daytime, Echo, Discard, NTP/SNTP

Java IDE

Java Security

Java Data Mining tools

Java Data Mining tools

  • Weka - free Java tool with many implemented models (also feature selection, classifiers combiners etc.)
  • RapidMiner - Also written in Java tools for creating comlex data mining models with nice and simple GUI. It implements models of Weka and LibSVM - some details are avaliable in here
  • Apache Mahout - Large Scale Distributed Data Mining
  • Joone- Java Object Oriented Neural Engine
  • MULAN A java based tool with Weka for multi-label learning problems
  • ENCOG - Encog Artificial Intelligence Framework for Java
  • knime - Data mining tool with visual data flow designer, comprehensive to Weka and RapidMiner
  • Keel - Data mining tool also with visual data flow designer, with an aim on instance selection, fuzzy systems and evolutionary computing
  • Gate - text mining tool
  • ELKI - Environment for Developing KDD-Applications Supported by Index-Structures - DM tool with optimized for large datasets by the application of Index-structures
  • DeepLearning4J - Deep Learning for Java
  • SMILE - Smile - Statistical Machine Intelligence and Learning Engine - nice and simple ML libraries for Java with JupytherNotebook support
2011/10/18 16:01

Java training

Short tutorials

Java Hosting

Free

  • www.eatj.com - Free Java hosting (be careful free version is restricted)
  • Google App Engine - a free service from Google that allows the Java applications to be hosted on the cloud
  • Jelastic - Free java cloud with preconfigured Application Server etc.

Not Free

Some Java problems

  • Java Generic is just dissembling real generics. In real data are stored as Object type, and right before obtaining an object JVM is casting an object on given class. It is specially important when collecting primitive types, because they have to be wrapped to become an object, so your data structure require double memory size. It's also important when you want to have collection of collections, because then you loose casting abilities.
  • Operators in Java can not be overloaded, so in many scientific applications you loose transparency in your code (ex. matrix operations)
  • No two dimensional arrays. This simple feature is also desired in scientific computing
  • Logical operators such as or, and, xor work just on int type, so if you want to operate on ex. bytes, you have to do some funny tricks to obtain byte. Moreover it increase computational complexity, because each time you have to perform operations on 4 bytes instead of just one.
  • No properties and delegates - making coding more complex
  • No signed/unsigned data types. Its specially funny when you have to define net mask, because instead of 255.255.255.0 in Java you have to do it like this -127.-127.-127.0
  • No build in support for communication ports like parallel, serial, USB, etc.
  • No support for generic arrays ex. class XXX<T>{ T[] = new T[10]} is not allowed

This simple list is maybe not important for Server side programming, but for “every day use” it is a big defect. I my opinion there are two advantages of Java - it's multi-platform, and almost every computer has it implemented, also for Java exist available for free thousands of packages. (this is also a drawback, specially when you have to choose one that is the best one and you don't know which one). Something that marvels me is that there were plans to fix most of this problems, however they were blocked during JCP process.

Java 2 C# conversion and vice versa

  • Tangible - a set of convertors between c#, Java, C++ and VB, more over it works more details on:
  • Net2Java - Java.Net project
  • JNBridge Java to .Net bridge - allow calling .Net libraries form Java and vice versa

Some Java advantages over .Net

Java similar to .Net use JIT and AOT compilation, however there is a big difference between two implementations of Java and .Net. In .Net application code is translated into machine code when starting a program, while in Java the B-code is first interpreted and during that time it is optimized (usually its 3 phase process) so in the last phase the final optimized execution machine code is obtained. There are benefits of that solution.

  • Example 1 - If statement optimization:
      (size = 500000000)
      public static bool RunTest(int size){
          bool a = true, b = false, c = true, d = false;
          int i, j;
          for (i = 0; i <= size; i++){
              if (a | b){
                  a = !c;
                  b = !d;
              }
              else{
                  a = c;
                  b = d;
              }
          }
          return b;
      }
    • .Net execution time - around 1.5s without optimization 2.5s
    • Java execution time (after first 2 phases) - 0.0s

Why is that - because Java compiler and JIT knows that b = true (always)!!! so the code of RunTest method is just return true

  • Example 2 - Death code removal:
  (size = 5000000)
  public static boolean RunTest(int size) {
      boolean a = true, b = false;
      int i, j;
      double x = 0.12, y = 0.13, z = 0.14;
      //Death code
      for (i = 0; i <= size; i++) {
          x += 0.0001;
          z += 0.00012;
          y += Math.log(Math.atan(Math.sqrt(x / z)));
      }
      //End of death code
      b = Math.random() > 0.5;
      for (i = 0; i <= size; i++) {
          if (b) {
              a = b;
          } else {
              a = !b;
          }
      }
      return a;
  }
    • .Net execution time - around 0.6s without optimization 4.3s
    • Java execution time (after first 2 phases) - 0.6s

Why is that - because Death code is useless so Java knows it has to remove it, and .Net know it only with optimization turned on

  • Example 3 - Expression simplification:
  (size = 500000000)
  public static int RunTest(int size) {
      int[] a = new int[4];
      int i, j;
      
      for (i = 0; i <= size; i++) {
          a[0] += i + 0 + i + 0;
          a[1] += i * 0;
          a[2] += i - i + 2 - 5 +3;
          a[3] += 1 + i + 1;
      }
      return a.hashCode();
  }
    • .Net execution time - around 5.5s without optimization 8.5s
    • Java execution time - 1.1s

Why is that - because Java during compilation to B-code makes code optimization so that a[0] += i+i; a[1] = 0; a[2] = 0; a[3] = i + 2; (I was surprised that C# compiler doesn't do that)

  • Printable version
  • Tell by mail
  • Export to OpenOffice
  • Export to PDF
  • Export to csv
  • Export to Timeline
  • Add page to book
  • Tools:
notatki/informatyka/java.txt · Last modified: 2019/03/21 13:06 (external edit)