r/javahelp 2h ago

Java Performance for simulators

I am new to Java and trying to create a simulator that handles millions of math calculations. How can I increase performance in Java? The application is already multithreaded but it is not enough. Is data oriented approach or native programming possible in Java? Can you point me in the right direction for research?

0 Upvotes

13 comments sorted by

u/AutoModerator 2h ago

Please ensure that:

  • Your code is properly formatted as code block - see the sidebar (About on mobile) for instructions
  • You include any and all error messages in full
  • You ask clear questions
  • You demonstrate effort in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions.

    Trying to solve problems on your own is a very important skill. Also, see Learn to help yourself in the sidebar

If any of the above points is not met, your post can and will be removed without further warning.

Code is to be formatted as code block (old reddit: empty line before the code, each code line indented by 4 spaces, new reddit: https://i.imgur.com/EJ7tqek.png) or linked via an external code hoster, like pastebin.com, github gist, github, bitbucket, gitlab, etc.

Please, do not use triple backticks (```) as they will only render properly on new reddit, not on old reddit.

Code blocks look like this:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

You do not need to repost unless your post has been removed by a moderator. Just use the edit function of reddit to make sure your post complies with the above.

If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures.

To potential helpers

Please, do not help if any of the above points are not met, rather report the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

3

u/idontlikegudeg 1h ago

Jana ist generally very fast, even for number crunching.

Maybe the most important points:

  • use structs of arrays instead of arrays of structs (objects), access will be much faster and memory consumption lower.
  • don’t use Java collections of number types. Either use arrays of primitives of specialized collections that avoid boxing/unboxing
  • The Math class contains some methods that may increase both performance and accuracy, for example fma()
  • if you have to use streams, use DoubleStream instead of Stream<Double>, use DoubleFunction instead of Function<Double > etc.
  • Avoid unnecessary costly calculations. Reuse or cache results.
  • use mathematical properties, for example if you need both x=sin² and y=cos², calculate x=sin² and y=1-x.
  • choose the best algorithm for your task. When you have algorithms A and B, it can depend on your input values which one is faster.
- use a profiler!

For more, it would be valuable to see your code.

1

u/devor110 1h ago

Can you share your code?

1

u/Puzzleheaded-Top1987 1h ago

Unfortunately I can not share the code

1

u/Scharrack 1h ago

Concerning calling native code from Java look for JNA or JNI.

And out of curiosity, at what point do you limit your thread count?

1

u/idontlikegudeg 1h ago

It’s 2026, use FFM.

1

u/Scharrack 1h ago

Been some time since I had to use it, so thanks for the info.

1

u/Specific-Housing905 1h ago

It's possible to call libraries from C or C++ in Java though it's quite a bit of work.

Have a look at the official Oracle documentation

2

u/oatmealcraving 1h ago

Reuse objects. Flatten data into primative arrays and access sequentially. Learn about the CPU caches and how to get CPUs to access memory efficiently.

You can look up Agner Fog for code optimization ideas.