question

Upvotes
Accepted
3 0 0 3

EMA Performance issue - Young GC is higher comparing with RFA

We are planning to switch from RFA to EMA to get level 1 market price. When we do performance testing, we found that EMA has much higher Young GC and larger amount of bytes created than RFA. I used View and StringDeduplication JVM parameters on consumer side to improve the performance. But, is there any reason that can explain this young GC problem? Does EMA have a dictionary similar to RFA dictionary to filter out unused fields and data?

elektronrefinitiv-realtimeelektron-sdkema-apirrtelektron-message-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hello @fanghua.liu

Normally Developer Community Forum is for how-to/general questions. However, your question seems to be complex and requires a deep investigation from API specialist team(my team) e.g.analyze the performance result, analyze RFA and EMA source code, try to reproduce the problem. Anyway, my team supports the queries from the premium users only. Therefore, I will send you an email containing the list of the premium users and the link to submit the query to us. Once we receive the case of this query from a premium user, we can assist you accordingly.

The client has submitted the case 07088471 for this question.

@Wasin Waeosri is taking care of the case.

<AHS>

This issue is RFA Java MD interface vs EMA Java performance. The case

07088471 is still "working in progress" phase. I have tried to replicate the issue but cannot replicate the issue yet, EMA Java has less Young GC than RFA Java MD in my test scenario.

@fanghua.liu
Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query? If yes please click the 'Accept' text next to the reply. This will guide all community members who have a similar question. Otherwise please post again offering further insight into your question.
Thanks,
-AHS

1 Answer

· Write an Answer
Upvotes
Accepted
24.6k 54 17 14

Hello @fanghua.liu

The API Development team has investigated this issue. The team confirms this is an EMA Java API expected behavior.

Basically, both RFA Java and Elektron SDK Java (EMA and ETA) already use pooling mechanism to reuse the existing objects in a pool to reduce young generation objects in JVM which can be collected frequently by JVM. However, EMA Java adopts the Java Collection<E> interface for ease of use for Java developers to decode/encode data from a container such as FieldList for the Market Price domain. The internal implementation for every EMA Java containers utilizes the LinkedList<E> container which creates a new Node<> for every add operation causing young generation object for every field entry added to the FieldList.

To achieve best performance in terms of latency and throughput, and garbage collection avoidance, the team recommends you using the ETA Java API as opposed to EMA Java. You can find more detail regarding the ETA Java API in the following pages:

  • ETA Java API Tutorial page:
  1. ETA Java API Quick Start page:

Alternatively, you may use the Views feature to request only interested fields to reduce network memory consumption and network bandwidth. You can see the View feature example code in EMA Java’s example360__MarketPrice__View example.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.