Пространство кучи Java OutOfMemoryError из-за постоянного увеличения использования памяти во время фазы LS - PullRequest
0 голосов
/ 24 мая 2019

У меня есть задача назначения задачи для оптимизации.Я решил использовать шаблон « Цепочка сквозного времени » с допустимыми промежутками из-за окон и перерывов в встречах.Я использую классы LocalDateTime и Duration для значений, связанных с датой / временем.

Я предоставил приложению максимум 2000 мегабайт и оптимизирую 4000 задач в 500 смен (50 рабочих x 10 дней)... что означает 4000 объектов планирования и 500 якорей.Приложение настроено на работу в течение максимум 8 часов.

Фаза CH быстро и легко увеличивается, затем начинается фаза LS, и она также проходит гладко.Однако со временем использование памяти становится все выше и выше до тех пор, пока OOME не будет выброшено.

Похоже, что если я отключу все свои правила слюни (с помощью префикса их условий when с false &&, получая таким образом правиланикогда не будет оцениваться), что заставляет программу работать быстрее, использование памяти также будет расти намного быстрее.OOME генерируется в течение 3 минут вместо часов.

Моя конфигурация выглядит следующим образом (опущено условие раннего завершения):

<solver>
    <environmentMode>NON_REPRODUCIBLE</environmentMode>
    <moveThreadCount>AUTO</moveThreadCount>

    <solutionClass>...</solutionClass>
    <entityClass>...</entityClass>
    ...

    <scoreDirectorFactory>
        <scoreDrl>...</scoreDrl>
        <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
    </scoreDirectorFactory>

    <constructionHeuristic>
        <constructionHeuristicType>ALLOCATE_ENTITY_FROM_QUEUE</constructionHeuristicType>
        <entitySorterManner>DECREASING_DIFFICULTY</entitySorterManner>
        <valueSorterManner>DECREASING_STRENGTH</valueSorterManner>
        <changeMoveSelector/>
    </constructionHeuristic>

    <localSearch>
        <unionMoveSelector>
            <changeMoveSelector/>
            <swapMoveSelector/>
            <tailChainSwapMoveSelector/>
            <subChainChangeMoveSelector/>
            <subChainSwapMoveSelector/>
        </unionMoveSelector>
        <acceptor>
            <lateAcceptanceSize>200</lateAcceptanceSize>
        </acceptor>
        <forager>
            <acceptedCountLimit>1</acceptedCountLimit>
        </forager>
    </localSearch>
</solver>

Вот пример прогона оптимизации, который получает OOME в течение4 часа:
пробег @ 3 часа (почти OOME)
пробег @ 4 часа (OOME)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...