저는 JDBC를 사용하여 MySQL 데이터베이스에 정보를 업데이트하는 JavaFX로 격투 게임을 작성했습니다. 데이터베이스 서버에서 기본 정보를 얻는 대부분의 작업은 지속적으로 반복되지 않으면 정상적으로 작동합니다. 문제는 게임 내에서 상대의 위치, 레벨, 피해량 등의 정보를 지속적으로 업데이트하는 프로그램이 필요할 때 발생합니다. 서버에 지속적으로 선택 명령을 보내야 하는데, 이로 인해 이러한 명령을 실행하는 스레드에서 사용하는 RAM이 늘어납니다.
으아아아몇가지 방법을 검색해봤는데 아주 유용한 방법을 발견했어요. 각 선택 후에는 다른 선택을 하기 전에 잠시 동안 스레드를 휴면 상태로 두었습니다. 이 접근 방식은 성능을 크게 향상시키며 RAM 소비는 안정적으로 유지됩니다. 그러나 이 접근 방식은 "선택" 스레드의 짧은 절전 모드로 인해 여전히 높은 RAM 소비가 발생하므로 항상 새로 고쳐야 하는 쿼리 정보에는 적합하지 않습니다. 이 문제를 해결하고 중간 게임 서버를 거치지 않고 게임을 데이터베이스 서버에 직접 연결할 수 있는 유용한 방법이 있습니까?
먼저 변수를 최적화해야 합니다.
스레드는 쿼리할 때 새 문자열을 계속 사용하지만 실제로는 한 번만 생성하면 됩니다. 마찬가지로 ResultSet의 경우 새 루프를 입력할 때마다 RAM의 새 위치를 사용하여 새 개체를 저장합니다.
Java ID 객체 외부에 콘솔 출력을 추가하여 이를 확인할 수 있습니다.
으아악그런 다음 출력 결과가 매번 다른지 관찰하세요.
이렇게:
으아악그런 다음 xPos/yPos가 "-1"이 아닌 값만 선택하고 실제 상대 위치 변경 결과만 가져오도록 쿼리를 변경하고 마지막으로 "new"를 보내는 대신 Position", 단지 두 개의 변수 opposingX 및 opposingY를 보내면 이 개체가 RAM에 저장되는 것을 방지할 수 있습니다.
잊지 마세요. Java는 코드 실행이 완료된 후에만 RAM 개체를 정리하므로 끝나지 않는 단일 스레드가 있어도 이 문제가 발생하지 않습니다.