Как удалить дубликаты слов с помощью Java, когда слов больше 200 миллионов?

У меня есть файл (размер = ~ 1,9 ГБ), который содержит ~ 220 000 000 (~ 220 миллионов) слов / строк. У них есть дублирование, почти 1 дублированное слово на каждые 100 слов.

Во второй программе я хочу прочитать файл. Я успешно читать файл по строкам, используя BufferedReader.

Теперь для удаления дубликатов мы можем использовать Set (и его реализации), но Set имеет проблемы, как описано ниже в 3 различных сценариях:

With default JVM size, Set can contain up to 0.7-0.8 million words, and then OutOfMemoryError. With 512M JVM size, Set can contain up to 5-6 million words, and then OOM error. With 1024M JVM size, Set can contain up to 12-13 million words, and then OOM error. Here after 10 million records addition into Set, operations become extremely slow. For example, addition of next ~4000 records, it took 60 seconds.

У меня есть ограничения, которые я не могу увеличить размер JVM дальше, и я хочу удалить дубликаты слов из файла.

Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи о каких-либо других способах / подходах для удаления повторяющихся слов с использованием Java из такого гигантского файла. Большое спасибо :)

Добавление информации к вопросу: Мои слова в основном буквенно-цифровые и являются уникальными в нашей системе идентификаторами. Следовательно, они не простые английские слова.