Skip to content

WrappedDataWatcher#hasIndex too slow because of try/catch #850

@MeGysssTaa

Description

@MeGysssTaa

Describe the bug
The current implementation of WrappedDataWatcher#hasIndex makes use of method public Object getObject(WrappedDataWatcher.WrappedDataWatcherObject object). In order for this method to return null, or, in other words, in order for hasIndex to return false, a NullPointerException or an InvocationTargetException must be thrown and handled:

(see screenshot 1)

This solution is slow in scenarios where hasIndex is called very often (for example, when using a custom data watcher to create cross-compatible packet NPCs):

(see screenshot 2)

To Reproduce
Steps to reproduce the behavior:

  1. Use method hasIndex of WrappedDataWatcher often enough, e.g. in a custom data watcher for cross-compatible packet NPCs.
  2. Create a Java Flight Recording.
  3. Enjoy a ton of NullPointerExceptions and even more InvocationTargetExceptions in the exceptions tab.

Expected behavior
I would really appreciate it if this method was faster and avoided use of any try/catch statements and exception handlers, so that it may be called very frequently without negative performance consequences.

Screenshots
code snippet of getObject

exception call stack snippet from JFR

Version Info
https://pastebin.com/7bi3qARm

Additional context
High load.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions