|
|
|
ForkJoinPool пример - обсудим ?
|
|||
|---|---|---|---|
|
#18+
Нашел на просторах интернета пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. При попытке запуска этого примера на своем компьютере словил Throwable: Код: java 1. 2. После чего уменьшил значение переменной SIZE на порядок (убрал один 0). Результат выполнения: Код: java 1. 2. убрал еще один 0: Код: java 1. 2. ну и дальше растет разница в скорости вычисления в стору последовательного исполнения. Здесь вроде как пропущен 1 if в методе compute, но суть не в этом. Меня интересуют 2-а вопроса: 1). Кто съел всю память ? - потоки ? 2). Если задача и порожденные ею подзадачи занимаются только вычислениям, без задержек (например, чтение данных из базы, ожидания ввода и прочего) и тп, то оптимальное количество потоков для такой задачи = количество процессоров*количество ядер в них ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2018, 14:12 |
|
||
|
ForkJoinPool пример - обсудим ?
|
|||
|---|---|---|---|
|
#18+
Примечание: В отличии от оригинального примера класс, реализующий RecuriveTask, я сделал статическим и поместил внутрь основного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2018, 14:21 |
|
||
|
ForkJoinPool пример - обсудим ?
|
|||
|---|---|---|---|
|
#18+
Про память сразу не посмотрел, ругается на строку - Код: java 1. , хотя SIZE < Integer.MAX_VALUE, буду разбираться ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2018, 14:43 |
|
||
|
ForkJoinPool пример - обсудим ?
|
|||
|---|---|---|---|
|
#18+
Вроде разобрался (взял примерное значение размера массива, после которого вылетал OutOfMemoryError, равным 44 700 000 элементов;): В системе 3.41 Гб ОЗУ. до создания массива команда Runtime.getRuntime().freeMemory() до выдает значение 15 775 784 байт. для выделения памяти массиву потребуется 44 700 000 * 4 = 178 800 000 байт. Мое предположение: Так как объем памяти, необходимый для выделения массиву превышает объем свободной памяти, то скорее всего JVM резервирует дополнительную память (возможно вместе с чисткой мусора). При этом максимальное значение выделяемой памяти не может превышать какого то порогового значения (подозреваю, что это 256 мб), после которого и ловим error. Кто в теме, напишите, прав ли я? И может посоветуете хорошие доки по теме? Примечание: после распределения 44 700 000 элементов команда Runtime.getRuntime().freeMemory() до выдает значение 5 038 528 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2018, 16:21 |
|
||
|
ForkJoinPool пример - обсудим ?
|
|||
|---|---|---|---|
|
#18+
IMHO Параметры командной строки Java -Xmx -Xms указывать явно и крайне желательно равными друг другу в остальных случаях, за доп. памятью обрашаемся к ОС, а почему она не смогла выделить, вопрос уже к ОС ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2018, 16:28 |
|
||
|
|

start [/forum/moderation_log.php?user_name=pikina]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 778ms |
| total: | 1037ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...