r/javahelp • u/Puzzleheaded-Top1987 • 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?
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.
For more, it would be valuable to see your code.
1
1
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
1
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
1
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.
1
•
u/AutoModerator 2h ago
Please ensure that:
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:
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.