Java разбивает Windows - PullRequest
       15

Java разбивает Windows

1 голос
/ 08 января 2010

Я разрабатывал Java-приложение, используя J2EE и базу данных Derby. Мой босс проводит большую часть тестирования, а я - большую часть кодирования, но он пришел ко мне со странной проблемой. Он утверждает, что иногда приложение Java "сбивает его компьютер".

Чтобы упомянуть несколько деталей, сначала позвольте мне сказать, что в настоящее время я работаю удаленно, поэтому я не могу быть рядом, когда происходят эти "сбои". Во-вторых, я использую OS X 10.6, а он - Windows XP (я думаю, SP3). Рассматриваемое Java-приложение не использует JNI или что-то странное, кроме встроенной базы данных Derby. Наконец, он сказал, что в Windows все зависает (его мышь даже не двигается) - он не отображается в консоли, как неперехваченное исключение.

Итак, возможно ли, что моя Java-программа дает сбой его компьютеру? Я не думал, что Java-код может иметь какие-либо общесистемные эффекты вне JVM. Возможно, это ошибка моей программы, или я должен просто проигнорировать это и приписать это какой-то проблеме с его компьютером?

Ответы [ 6 ]

3 голосов
/ 08 января 2010

Чтобы Java-приложение могло аварийно завершить работу ОС, в которой оно работает, в JVM должна быть ошибка. Тем не менее, существуют ситуации, которые могут создать такое же впечатление:

  • Java-приложение может нарастить кучу настолько, что операционная система начинает меняться, а другие приложения замедляются
  • Java-приложение может захватывать все ЦП одним или несколькими потоками в тесном цикле занятости

Если вы можете настроить компьютер тестеров таким образом, чтобы при возникновении проблемы мог запускаться дамп кучи, вы можете проанализировать этот дамп удаленно. Например, с помощью IBM анализатора кучи Java , найденного в alphaworks.

2 голосов
/ 08 января 2010

он сказал, что в Windows все зависает (его мышь даже не двигается)

Приложение пользовательского режима - будь то Java или иное - не может сделать это против современной ОС, такой как WinNT.

У него либо проблема с оборудованием, либо плохой драйвер.

2 голосов
/ 08 января 2010

Были случаи до сбоев под Windows на IBM ThinkPad (и я уверен, что другие машины) из-за плохого графического драйвера. Я бы предложил сделать обычную вещь, чтобы убедиться, что водители в курсе, просто чтобы быть в безопасности.

Хотя ваш код может не использовать JNI напрямую, многое из того, что происходит внутри, может (что-либо, что по существу интегрируется с базовой ОС). Это означает, что драйверы могут быть большой проблемой.

Другое дело, чтобы быть уверенным в том, что используется самая последняя версия Java (если 1.6_17, наконец, невозможно, последняя версия используемой версии Java).

Еще одна вещь, которая исправила случайные сбои для меня, - это переустановить память (отключить и снова подключить).

1 голос
/ 28 ноября 2015

Чтобы разбить весь компьютер, попробуйте это:

public void crashComputer() {
    while(true)
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    crashComputer();
                }
            }
        }).start();
}

public void crashJVM() {
    while(true)
        crashJVM();
}

Функция crashComputer занимает около 2 секунд для сбоя всего компьютера. Вы можете остановить его сбой, удерживая кнопку питания.

Функция crashJVM разбивала только JVM, перегружая стек, вызывая переполнение стека (отсюда и название этого сайта).

ВНИМАНИЕ: Используйте на свой страх и риск. Это не повредит вашему компьютеру, но я не возьму вину на себя, если вы забудете нажать «Сохранить» на документе или чем-то подобном.

0 голосов
/ 10 июля 2011

Точка первая: В моей системе XP, SP3, когда какая-либо программа запускает полный наклон, она почти блокирует компьютер. Когда моя антивирусная программа проверяет наличие обновлений, все остальное останавливается для всех практических целей и использует очень мало ЦП (кажется, все время пишет на диск). Мои собственные бесконечные циклы, использующие 100% CPU, имеют аналогичный эффект. (Почему диспетчер задач не получает приоритет над пользовательской программой с «нормальным» приоритетом, я не знаю.)

Второй пункт: На любом компьютере, который я когда-либо использовал, интенсивный пейджинг приведет к почти полной остановке программы.

Итак, начните с компьютера XP с 512 МБ реальной памяти и 2000 МБ виртуальной памяти. Напишите программу на Java с массивами и другими структурами данных на 1400 МБ. Включите цикл, который повторяется несколько миллиардов раз и читает или записывает каждый байт в этих 1400 МБ при каждом выполнении. Эта программа не будет завершена до тех пор, пока вселенная не разрушится сама по себе. Компьютер ничего не сделает. Я не пробовал этого и не собираюсь этого делать, но буду ставить на что угодно, даже если мышь не будет двигаться. В зависимости от марки компьютера единственным исправлением может быть вытягивание вилки из розетки. (Обратите внимание, что технически компьютер не сломался. Действительно, он работает просто отлично. Но вам нужно набраться терпения. Переместите мышь за день до того, как вы планируете щелкнуть мышью.)

Мораль этой истории - избегать как XP, так и виртуальной памяти, но если вам приходится иметь дело с любым из них, помните об этих проблемах.

0 голосов
/ 04 марта 2011

Также проверьте пространство подкачки в клиентской (Windows / XP) системе.

...