Решить Причина: java.lang.IllegalStateException:
Решить Причина: java.lang.IllegalStateException:

При разработке веб-приложений с использованием Java,мы иногда сталкиваемся​​Caused by: java.lang.IllegalStateException​​​аномальный,Он содержит описание ошибки StackOverflow. Эта ошибка может привести к невозможности завершения сканирования аннотаций веб-приложения.,Также будут упомянуты некоторые потенциальные причины.,нравиться​​-Xss​​Установка слишком низких и незаконных зависимостей циклического наследования.。

Описание проблемы

Язык кода:javascript
копировать
Код javaCopyВызвано: java.lang.IllegalStateException: из-за ошибки StackOverflower,Невозможно завершить паруwebприложение[/lib]Сканирование комментариев。Возможные основные причины включают в себя-Xssиз Установка слишком низких и незаконных зависимостей циклического наследования.。Обрабатываемая иерархия классов[org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]
    at org.apache.jasper.compiler.JspRuntimeContext.getServletContainerInitializer(JspRuntimeContext.java:109)
    at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:176)
    at org.apache.jasper.servlet.JspServletWrapper.init(JspServletWrapper.java:65)
    ...

Это исключение обычно выдается во время сканирования нашего веб-приложения и может помешать правильному запуску приложения.

решение

1. Измените параметр -Xss JVM.

первый,Мы можем попробовать, добавивJVMиз​​-Xss​​параметризстоит решить эту проблему。该параметр用于设置每个线程изразмер стека,Значение по умолчанию — 512 КБ. Мы можем увеличить его до большего значения.,чтобы обеспечить больше места для стека,Это позволяет избежать ошибок StackOverflow. Можно начать вприложениечасиспользовать Следующие настройки параметров командной строки​​-Xss​​параметризценить:

Язык кода:javascript
копировать
plaintextCopy codejava -Xss2m -jar your-application.jar

Здесь мы будем​​-Xss​​параметризценить设置为2MB,Обычно этого достаточно для большинства ситуаций. Если проблема решена,Указывает, что причиной исключения является недостаточное пространство в стеке.,И за счет увеличения размера стека,Мы успешно избежали ошибок StackOverflow.

2. Проверьте наличие циклических зависимостей наследования.

Другая возможная причина — наличие недопустимых циклических зависимостей наследования. В соответствии с иерархией классов, указанной в сообщении об исключении.,мы можем видеть​​org.bouncycastle.asn1.ASN1EncodableVector​​Между классами существует циклическая зависимость наследования.。 В этом случае нам необходимо тщательно проверить отношения наследования между родственными классами и убедиться в отсутствии ситуаций, приводящих к циклическим зависимостям. Если существуют циклические зависимости, соответствующие отношения наследования должны быть скорректированы, чтобы избежать исключений.

3. Обновите связанные библиотеки и зависимости.

Иногда исключение может быть вызвано использованием устаревших или несовместимых библиотек или зависимостей. Поэтому нам следует проверить версии библиотек и зависимостей, которые мы используем, и попытаться обновить их до последних стабильных версий. Это может исправить некоторые известные проблемы, а также внести улучшения и исправления, совместимые с используемой нами версией Java.

Подвести итог

Настраивая параметры JVM -Xss, проверьте зависимости циклического наследованияи Обновите связанные библиотеки и зависимости.,мы можем решить это​Причина: java.lang.IllegalStateException: сканирование аннотаций для веб-приложения [/lib] не удалось завершить из-за ошибки StackOverflower.​аномальный。В решении этой проблемы,Нам необходимо выполнить глубокий анализ и отладку структуры и зависимостей приложения.,определить причину и принять соответствующие меры.

Когда мы разрабатываем веб-приложения,有час候会遇到上述из​​Caused by: java.lang.IllegalStateException​​аномальный。для лучшего пониманияирешить эту проблему,Предположим, существует Spring-основанный Загрузка веб-приложения платформы с помощью Bouncy Хранилище ключей замка обрабатывает криптографические операции. Предположим, наше приложение содержит следующую структуру классов:

Язык кода:javascript
копировать
javaCopy codepackage org.example;
import org.bouncycastle.asn1.ASN1EncodableVector;
public class CustomVector extends ASN1EncodableVector {
    private CustomEntity entity;
    public void setEntity(CustomEntity entity) {
        this.entity = entity;
    }
    public CustomEntity getEntity() {
        return entity;
    }
}
Язык кода:javascript
копировать
javaCopy codepackage org.example;
import org.bouncycastle.asn1.DEREncodableVector;
public class CustomEntity extends DEREncodableVector {
    private CustomVector vector;
    public void setVector(CustomVector vector) {
        this.vector = vector;
    }
    public CustomVector getVector() {
        return vector;
    }
}

Теперь наше приложение выдает исключение при запуске.,и упомянул​​org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector​​изиерархия классов。 Чтобы решить эту проблему, нам необходимо проверить и исправить циклические зависимости между вышеуказанными классами. решениедадобавив​​CustomVector​​и​​CustomEntity​​из Отношения наследования изменены на отношения агрегации.,тем самым устраняя циклические зависимости。мы можем удалить​​CustomVector​​и​​CustomEntity​​изотношения наследства,И передавайте экземпляры друг друга через методы конструктора или установщика:

Язык кода:javascript
копировать
javaCopy codepackage org.example;
import org.bouncycastle.asn1.ASN1EncodableVector;
public class CustomVector {
    private CustomEntity entity;
    public CustomVector(CustomEntity entity) {
        this.entity = entity;
    }
    public void setEntity(CustomEntity entity) {
        this.entity = entity;
    }
    public CustomEntity getEntity() {
        return entity;
    }
}
Язык кода:javascript
копировать
javaCopy codepackage org.example;
import org.bouncycastle.asn1.DEREncodableVector;
public class CustomEntity {
    private CustomVector vector;
    public CustomEntity(CustomVector vector) {
        this.vector = vector;
    }
    public void setVector(CustomVector vector) {
        this.vector = vector;
    }
    public CustomVector getVector() {
        return vector;
    }
}

Изменив отношение наследования на отношение агрегации.,Мы устранили циклические зависимости,таким образом решено​​java.lang.IllegalStateException​​аномальный。 нужно вниманиеизда,Это просто решение,Применимость этого метода зависит от фактического сценария применения и требований. При решении подобных задач,Нам необходимо тщательно проанализировать и отладить структуру и зависимости приложения.,И принять соответствующие меры в соответствии с конкретной ситуацией.

​-Xss​​​даJavaвиртуальная машинаиз一个параметр,Используется для установки размера стека потоков. Стек потока — это область памяти, используемая для хранения локальных переменных, вызовов методов и возвращаемой информации при выполнении потока. Каждый поток имеет свой собственный стек потоков.,Размер можно регулировать в соответствии с потребностями приложения. По умолчанию,Виртуальная машина Java автоматически устанавливает размер стека потоков. но,в некоторых случаях,Возможно, вам придется вручную настроить размер стека потоков.,удовлетворитьприложениеизнуждаться。использовать​​​-Xss​​​параметр Может指定线程栈изразмер。 ​​​-Xss​​​параметриз Синтаксис::​​-Xss<size>​​​,в​​<size>​​​Представляет стек потоковизразмер,Можетиспользовать​​K​​​、​​M​​​、​​G​​​выражается в других единицах。примернравиться,​​-Xss1M​​Указывает, что стек потоковизразмер设置为1MB。 Целью настройки размера стека потоков является:

  1. Контролируйте потребление памяти потоками. Размер стека потоков напрямую влияет на затраты памяти при создании и уничтожении потоков. Стек потоков большего размера занимает больше памяти, а стек потоков меньшего размера экономит пространство памяти.
  2. Избегайте переполнения стека потоков. Размер стека потоков ограничивает количество методов, которые поток может вызвать. Если размер стека потока установлен слишком мал, в случае рекурсивных вызовов или глубоких вызовов методов может возникнуть исключение переполнения стека потока. Следует отметить, что при настройке размера стека потоков отладка и оптимизация должны основываться на потребностях реального приложения. Установка слишком маленького стека потоков может вызвать исключение переполнения стека, а установка слишком большого стека потоков может привести к высокому использованию памяти. Поэтому соответствующие настройки должны быть выполнены на основе ограничений параллелизма и ресурсов конкретного приложения. Вы можете использовать следующий код, чтобы получить текущий размер стека потока в приложении Java:
Язык кода:javascript
копировать
javaCopy codepublic class ThreadStackSizeExample {
    public static void main(String[] args) {
        Thread currentThread = Thread.currentThread();
        System.out.println("Current thread stack size: " + currentThread.getStackTrace().length);
    }
}

Подвести итогвставать,​​-Xss​​параметрда Используется для установки стека потоковизразмериз,Регулируя размер стека потоков,Может контролировать потребление памяти,И избегайте проблемы переполнения стека потоков.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода