Я безуспешно пытался смонтировать компакт-диск в Dosbox после того, как проследил за различными ветками там.
Похоже, проблема в том, что я не могу распознать каталог, в котором находится мой компакт-диск. Когда я смотрю на расположение компакт-диска, он показывает / media / andrew / CM
(игра Championship Manager 2), поэтому я попробовал / media / CM
, / media / andrew / CM
и т. д., но всегда указывает, что каталог не существует.
Есть идеи, пожалуйста?
Если Вы хотите действительно посмотреть на то, что продолжается в памяти VM, необходимо использовать хороший инструмент как VisualVM. Это программное обеспечение является бесплатным, и это - отличный способ видеть то, что продолжается.
Ничто не действительно "неправильно" с явным gc () вызовы. Однако помните, что при вызове gc () Вы "предполагаете" что запущенный сборщик "мусора". Нет никакой гарантии, что это будет работать в точное время, Вы выполняете ту команду.
Существуют инструменты, которые позволяют Вам контролировать использование памяти VM. VM может выставить статистику памяти с помощью JMX. Можно также распечатать статистику GC, чтобы видеть, как память работает со временем.
Вызов System.gc () может вредить производительности GC, потому что объекты будут преждевременно перемещены от нового до старых поколений, и слабые ссылки будут очищены преждевременно. Это может привести к уменьшенной эффективности памяти, более длительные времена GC и уменьшенные удачные обращения в кэш (для кэшей, которые используют слабых судей). Я соглашаюсь с Вашим консультантом: System.gc () плох. Я пошел бы до для отключения его с помощью переключателя командной строки.
Быстрый взгляд в то, что происходит внутренний кот через Визуальный VM. http://www.skill-guru.com/blog/2010/10/05/increasing-permgen-size-in-your-server/
Вы попробовали JMX?
http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
(источник: sun.com)
Смотрите на JVM args: http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#DebuggingOptions
Печать XX:-PrintGC обменивается сообщениями при сборке "мусора". Управляемый.
- Печать XX:-PrintGCDetails больше деталей при сборке "мусора". Управляемый. (Представленный в 1.4.0.)
- Печать XX:-PrintGCTimeStamps устанавливает метку времени при сборке "мусора". Управляемый (Представленный в 1.4.0.)
- Печать XX:-PrintTenuringDistribution tenuring информация о возрасте.
В то время как Вы не собираетесь нарушать JVM с явными вызовами к System.gc()
они не могут иметь эффекта, который Вы ожидаете. Действительно понять, что продолжает память в JVM с чтением что-либо и все записи Brian Goetz.
При использовании JMX, обеспеченного историю выполнений GC, можно использовать то же перед/после того, как числами, Вы просто не должны вызывать GC.
просто необходимо иметь в виду, что те выполнения GC (обычно один для старого и один для нового поколения) не находятся на регулярном меж-Вальсе, таким образом, необходимо извлечь starttime также для графического изображения (или Вы выводитесь на печать против порядкового номера для наиболее практических целей, которые были бы достаточно для графического изображения).
, Например, на Oracle HotSpot VM с ParNewGC, существует JMX MBean, названный java.lang:type=GarbageCollector,name=PS Scavenge
, он имеет атрибут LastGCInfo, он возвращает CompositeData последнего выполненного мусорщика YG. Это зарегистрировано с duration
, абсолютный startTime
и memoryUsageBefore
и memoryUsageAfter
.
Просто используют таймер для чтения того атрибута. Каждый раз, когда новый startTime обнаруживается, Вы знаете, что он описывает новое событие GC, Вы извлекаете информацию о памяти и продолжаете опрашивать относительно следующего обновления. (Не уверенный, если AttributeChangeNotification
так или иначе может использоваться.)
Подсказка: в Вашем таймере Вы могли бы измерить расстояние до последнего GC, выполненного, и если это слишком длинно для resulution Вашего графического изображения, Вы могли бы вызвать System.gc () условно. Но я не сделал бы этого в экземпляре OLTP.
Я сказал бы, что консультант прав в теории, и Вы правы на практике. Как говорится:
В теории теория и практика являются тем же. На практике они не.
Спецификация Java говорит, что System.gc предлагает назвать сборку "мусора". На практике это просто порождает поток и работает сразу же на JVM Sun.
Хотя в теории Вы могли портить некоторую точно настроенную реализацию JVM сборки "мусора", если Вы не пишете общий код, предназначенный, чтобы быть развернутыми на любой JVM там, не волнуйтесь об этом. Если это работает на Вас, сделайте это.
Можно смотреть на stagemonitor. Это - Java с открытым исходным кодом (сеть) монитор производительности приложения. Это получает метрики времени отклика, метрики JVM, детали запроса (включая стек вызовов, полученный профилировщиком запроса) и т.д. Издержки являются очень низкими.
Дополнительно, можно использовать большой timeseries графит базы данных с ним для хранения долгой истории точек данных, что можно посмотреть на с необычными панелями инструментов.
Пример:
Смотрят на веб-сайт проекта для наблюдения снимков экрана, описаний функции и документации.
Примечание: Я - разработчик stagemonitor
Явно выполнение System.gc () в производственной системе является ужасной идеей. Если память добирается до какого-либо размера вообще, вся система может заморозиться, в то время как полный GC работает. На multi-gigabyte-sized сервере это может легко быть очень примечательно, в зависимости от того, как jvm настроен, и сколько высоты он имеет, и т.д. и т.д. - я видел паузы больше чем 30 секунд.
Другая проблема - то, что путем явного вызова GC Вы на самом деле не контролируете, как JVM выполняет GC, Вы на самом деле изменяете его - в зависимости от того, как Вы настроили JVM, это собирается собрать "мусор" в надлежащих случаях, и обычно инкрементно (Это только выполняет полный GC, когда это исчерпывает память). То, что Вы будете распечатывать, будет ничем как то, что JVM сделает на своем собственном - с одной стороны, Вы будете, вероятно, видеть меньше автоматические / возрастающий GC, поскольку Вы будете очищать память вручную.
Как сообщение Nick Holt указывает, опции распечатать действие GC уже существуют как флаги JVM.
У Вас мог быть поток, который просто распечатывает свободный и доступный в разумных интервалах, это покажет Вам фактическую мадам useage.
Как был предложен, попробуйте VisualVM для получения основного представления.
Можно также использовать ЦИНОВКУ Eclipse, чтобы сделать более подробный анализ памяти.
Нормально делать System.gc () как долго, поскольку Вы не зависите от него для правильности Вашей программы.
Если Вам нравится хороший способ сделать, это из командной строки использует jstat:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
Это дает необработанную информацию в настраиваемых интервалах, которая очень полезна для входа и построения графика целей.
Создайте образ диска с компакт-диска, затем:
Вручную:
dosbox -c "imgmount D [isoList] -t iso" [exe] -fullscreen -exit
Автоматически: