5
5
6
6
package io .opentelemetry .sdk .trace .internal ;
7
7
8
- import java .util .Objects ;
9
- import java .util .Optional ;
10
8
import java .util .Queue ;
11
- import java .util .concurrent .atomic .AtomicBoolean ;
12
9
import java .util .function .Consumer ;
13
- import java .util .logging .Level ;
14
- import java .util .logging .Logger ;
15
10
import org .jctools .queues .MessagePassingQueue ;
16
- import org .jctools .queues .MpscArrayQueue ;
17
11
import org .jctools .queues .atomic .MpscAtomicArrayQueue ;
18
12
19
13
/**
24
18
*/
25
19
public final class JcTools {
26
20
27
- private static final AtomicBoolean queueCreationWarningLogged = new AtomicBoolean ();
28
- private static final Logger logger = Logger .getLogger (JcTools .class .getName ());
29
- private static final boolean PROACTIVELY_AVOID_UNSAFE = proactivelyAvoidUnsafe ();
30
-
31
21
/**
32
22
* Returns a new {@link Queue} appropriate for use with multiple producers and a single consumer.
33
23
*/
34
24
public static <T > Queue <T > newFixedSizeQueue (int capacity ) {
35
- if (PROACTIVELY_AVOID_UNSAFE ) {
36
- return new MpscAtomicArrayQueue <>(capacity );
37
- }
38
- try {
39
- return new MpscArrayQueue <>(capacity );
40
- } catch (java .lang .NoClassDefFoundError | java .lang .ExceptionInInitializerError e ) {
41
- if (!queueCreationWarningLogged .getAndSet (true )) {
42
- logger .log (
43
- Level .WARNING ,
44
- "Cannot create high-performance queue, reverting to ArrayBlockingQueue ({0})" ,
45
- Objects .toString (e , "unknown cause" ));
46
- }
47
- // Happens when modules such as jdk.unsupported are disabled in a custom JRE distribution,
48
- // or a security manager preventing access to Unsafe is installed.
49
- return new MpscAtomicArrayQueue <>(capacity );
50
- }
25
+ return new MpscAtomicArrayQueue <>(capacity );
51
26
}
52
27
53
28
/**
@@ -69,24 +44,5 @@ public static <T> int drain(Queue<T> queue, int limit, Consumer<T> consumer) {
69
44
return ((MessagePassingQueue <T >) queue ).drain (consumer ::accept , limit );
70
45
}
71
46
72
- private static boolean proactivelyAvoidUnsafe () {
73
- Optional <Double > javaVersion = getJavaVersion ();
74
- // Avoid Unsafe on Java 23+ due to JEP-498 deprecation warnings:
75
- // "WARNING: A terminally deprecated method in sun.misc.Unsafe has been called"
76
- return javaVersion .map (version -> version >= 23 ).orElse (true );
77
- }
78
-
79
- private static Optional <Double > getJavaVersion () {
80
- String specVersion = System .getProperty ("java.specification.version" );
81
- if (specVersion != null ) {
82
- try {
83
- return Optional .of (Double .parseDouble (specVersion ));
84
- } catch (NumberFormatException exception ) {
85
- // ignore
86
- }
87
- }
88
- return Optional .empty ();
89
- }
90
-
91
47
private JcTools () {}
92
48
}
0 commit comments