Я написал функцию управления списком как на F #, так и Scala для сравнения производительности. Чтобы проверить эту функцию мне нужно инициализировать список от 1 до 100000000.Scala vs F # on List range от 1 до 100000000
F #:
let l = [1..100000000];;
Real: 00: 00: 32,954, CPU: 00: 00: 34,593, GC gen0: 1030 , gen1: 520, gen2: 9
Это работает.
Скала: вариант Скала -J-Xmx2G
val l = (1 to 10000000).toList // works
val l = (1 to 100000000).toList // no response long while and finally got java.lang.OutOfMemoryError: Java heap space
С 100000000 (100,000,000), отсутствие ответа на долгое время (в час) с 75% до 90% загрузки процессора и памяти 2 Гб и, наконец, получил java.lang.OutOfMemoryError: пространство кучи Java.
Я делаю что-то не так в Scala?
Вы пытаетесь увеличить количество экземпляров этой страницы? Возможно, когда вы создаете процесс сбора сборщика мусора и используете 90% вашего процессора. – krynio
Существует множество накладных расходов в scala 'List' за столько элементов. Вы ничего не делаете неправильно; это просто много размещения объектов. Единственная коллекция, которую я могу построить такого размера в разумные сроки, кажется, представляет собой массив. – Nate
Является ли размер кучи F # аналогичным образом ограниченным 2 ГБ? Сам список, предполагающий 8 байтовых целых чисел и 8 байтовых указателей, занимает не менее 1,6 Гбайт памяти кучи. – lea