Существует ли различие в производительности между отладкой Javac на и прочь?

Согласно spec ,

Идентификаторы также могут содержать экранированные символы и любой символ ISO 10646 в виде числового кода (см. следующий пункт). Например, идентификатор «B & amp; W?» может быть записано как «B \ & amp; W \?» или "B \ 26 W \ 3F". [...]

В CSS 2.1 символ обратной косой черты (\) может указывать на один из трех типов escape-символов. Внутри комментария CSS обратная косая черта выступает сама по себе, и если обратная косая черта сразу же следует за окончанием таблицы стилей, она также выступает за себя (т. Е. Токен DELIM).

Во-первых, внутри строка, обратная косая черта, сопровождаемая новой строкой, игнорируется (т. е. считается, что строка не содержит обратную косую черту или новую строку). Вне строки обратная косая черта, за которой следует новая строка, выступает за себя (т. Е. DELIM, за которой следует новая строка).

Во-вторых, она отменяет значение специальных символов CSS. Любой символ (кроме шестнадцатеричной цифры, перевода строки, возврата каретки или фида формы) может быть экранирован с помощью обратного слэша, чтобы удалить его особое значение. Например, «\» »представляет собой строку, состоящую из одной двойной кавычки. Препроцессоры таблиц стилей не должны удалять эти обратные косые черты из таблицы стилей, поскольку это может изменить значение таблицы стилей.

В-третьих, экраны обратной косой черты позволяют авторам чтобы ссылаться на символы, которые они не могут легко помещать в документ. В этом случае обратная косая черта сопровождается шестью шестнадцатеричными цифрами (0..9A..F), которые соответствуют символу ISO 10646 ([ISO10646]) с этим число, которое не должно быть равно нулю. (В CSS 2.1 не определено, что произойдет, если таблица стилей содержит символ с нумером Unicode.) Если символ в диапазоне [0-9a-fA-F] следует шестнадцатеричному числу , конец номера должен быть прояснен. Существует два способа сделать это:

  1. с пробелом (или другим символом пробела): «\ 26 B» («& amp; B "). В этом случае пользовательские агенты должны обрабатывать пару« CR / LF »(U + 000D / U + 000A) как один символ пробела.
  2. , предоставляя ровно 6 шестнадцатеричных цифр: \ 000026B "(" & a mp; B ")

На самом деле эти два метода могут быть объединены. После шестнадцатеричного escape-кода игнорируется только один символ пробела. Обратите внимание, что это означает, что «реальное» пространство после escape-последовательности должно быть удвоено.

Если число выходит за пределы допустимого Unicode диапазона (например, «\ 110000» превышает максимально допустимое значение 10FFFF в текущем Unicode), UA может заменить побег «заменяющим символом» (U + FFFD). Если символ должен быть отображен, UA должен показать видимый символ, например глиф «отсутствующий символ» (см. 15.2, пункт 5).

blockquote>

Поэтому следующие эквиваленты :

.container.\31 25\25   <-->   .container[class ~= "125%"]
.container.\37 5\25    <-->   .container[class ~= "75%"]
.container.\35 0\25    <-->   .container[class ~= "50%"]
.container.\32 5\25    <-->   .container[class ~= "25%"]

Обратите внимание, что экранирование важно, иначе они не будут действительными идентификаторами (выделение мое):

В CSS, идентификаторы (включая имена элементов, классы и идентификаторы в селекторах ) могут содержать только символы [a-zA-Z0-9] и символы ISO 10646 U + 00A0 и выше, плюс дефис (-) и подчеркивание (_); они не могут начинаться с цифры, двух дефисов или дефиса, за которым следует цифра.

blockquote>

Поэтому следующие недопустимы:

.container.125%
.container.75%
.container.50%
.container.25%

Возможно, это может быть более ясно с этой скрипкой:

.container {
  background: red;
  margin: 10px;
}
.container.\31 25\25 { /* 125% */
  width: 100%;
  max-width: 1500px;  /* (containers * 1.25) */
  min-width: 1200px;  /* (containers * 1.00) */
}
.container.\37 5\25 { /* 75% */
  width: 900px;       /* (containers * 0.75) */
}
.container.\35 0\25 { /* 50% */
  width: 600px;       /* (containers * 0.50) */
}
.container.\32 5\25 { /* 25% */
  width: 300px;       /* (containers * 0.25) */
}
125%
75%
50%
25%

60
задан James McMahon 13 November 2009 в 16:56
поделиться

3 ответа

На любом языке отладочной информацией является метаинформация. Это по его характеру увеличивает размер объектных файлов, таким образом увеличивая время загрузки. Во время выполнения вне отладчика на самом деле полностью проигнорирована эта информация. Как обрисовано в общих чертах (хотя не ясно) в спецификация JVM отладочная информация хранится вне потока байт-кода. Это означает, что во время выполнения нет никакого различия в файле класса. Если Вы хотите быть уверенными, хотя, испытайте его:-).

ps Часто для отладки там является значением в выключении оптимизации. То, что делает , оказывают влияние производительности.

61
ответ дан Paul de Vrieze 24 November 2019 в 17:52
поделиться

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

, Но до сих пор, компромисс между получением значения полных отслеживаний стека или наличия еще некоторой пользовательской производительности, я всегда голосовал за отслеживания стека. В конце концов, пользователи готовы потратить 1 000$ каждый год для получения более быстрой машины, но не готовы провести 15 минут, чтобы дать Вам значимые сообщения об ошибках Вам для решения их проблем.

После лет, я более готов оценить свои 15 минут выше, чем 1 000$ пользователя.:)

14
ответ дан Paul Rubel 24 November 2019 в 17:52
поделиться

Знайте, что, так как JDK1.3 javac игнорирует любые флаги оптимизации, "оптимизация времени компиляции является ненужной"

7
ответ дан Maxim Veksler 24 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: