Problembeschreibung:
Beim Ausführen des folgenden Multithread-Programms tritt ein Problem auf. Das Programm erzeugt eine große Anzahl von Threads (10.000), die denselben Byte-Array-Wert verarbeiten. Das Problem tritt bei hoher CPU-Auslastung und bei Anwendung von Speicherbeschränkungen häufiger auf (z. B. Einstellung von -Xms32m -Xmx32m).
Die Methode byteArrayToInt soll ein bestimmtes Segment des Byte-Arrays konvertieren in eine ganze Zahl umwandeln. Es kommt jedoch zeitweise zu falschen Werten. Der erwartete Wert für liVersion ist 1, es werden jedoch stattdessen Zufallswerte beobachtet. Dieses Problem tritt auch dann auf, wenn das Programm mit ausreichend Speicher und einer geringeren Anzahl von Threads (sogar einem einzelnen Thread) ausgeführt wird, aber deutlich seltener auftritt.
Die ganzzahlige Konvertierung des 2. in den 4. Wert von pTestData which is [1, 0] sollte 1 sein, aber es gibt zeitweise zufällige Werte in der Ausgabe. Umgebung:
Betriebssystem: Windows 10
Java-Version: Eclipse Temurin-17.0.10+11 Codeausschnitt:
[b]Problembeschreibung:[/b] Beim Ausführen des folgenden Multithread-Programms tritt ein Problem auf. Das Programm erzeugt eine große Anzahl von Threads (10.000), die denselben Byte-Array-Wert verarbeiten. Das Problem tritt bei hoher CPU-Auslastung und bei Anwendung von Speicherbeschränkungen häufiger auf (z. B. Einstellung von -Xms32m -Xmx32m). Die Methode byteArrayToInt soll ein bestimmtes Segment des Byte-Arrays konvertieren in eine ganze Zahl umwandeln. Es kommt jedoch zeitweise zu falschen Werten. Der erwartete Wert für liVersion ist 1, es werden jedoch stattdessen Zufallswerte beobachtet. Dieses Problem tritt auch dann auf, wenn das Programm mit ausreichend Speicher und einer geringeren Anzahl von Threads (sogar einem einzelnen Thread) ausgeführt wird, aber deutlich seltener auftritt. Die ganzzahlige Konvertierung des 2. in den 4. Wert von pTestData which is [1, 0] sollte 1 sein, aber es gibt zeitweise zufällige Werte in der Ausgabe. [b]Umgebung:[/b] Betriebssystem: Windows 10 Java-Version: Eclipse Temurin-17.0.10+11 [b]Codeausschnitt:[/b] [code]import java.util.Arrays;
public class TestMain { private static int miParallelThreadCount = 10000;
private static long mlExecutionIntervalInMillis=100;
public static void main(String[] args) { System.out.println("Startin tornado at interval: " + mlExecutionIntervalInMillis + " with parallel threads: " + miParallelThreadCount); while(true) { //Runs the test code to reproduce the issue runTornado(); try { Thread.sleep(mlExecutionIntervalInMillis); } catch (Throwable lThrowable) { System.out.println("Task failed due to: " + lThrowable.getLocalizedMessage()); lThrowable.printStackTrace(); } } }
private static byte[] compareInner(byte[] pTestData, int pStartIndex, int pLength) { //Copies the pTestData into new array as it is byte[] lbarrData = Arrays.copyOfRange(pTestData, 0, 0 + pTestData.length); //copies only 2ndand 3rd element from the array which is [1, 0] byte[] lbarrVer = Arrays.copyOfRange(lbarrData, 2, 4);
//Converts the array [1, 0] into integer, which should always return 1 int liVersion = byteArrayToInt(lbarrVer);
Ich verwende Eclipse-Temurin JDK 21 als Docker-Basis-Image und führe eine Java-Anwendung aus. Dies ist die Java-Anwendungskonfiguration:
-Xss512k -Xms128m -Xmx450m -XX:MetaspaceSize=128m...
Ich verwende Eclipse-Temurin JDK 21 als Docker-Basis-Image und führe eine Java-Anwendung aus. Dies ist die Docker-Datei:
FROM 192.168.1.2:8084/eclipse-temurin:21-jdk
Ich habe versucht, den Java JDK auf meinem Laptop zu installieren, der vom Installationsprogramm auf der VS -Code -Website als Codierungspaket für Java bereitgestellt wird. Es installierte die JDK...