Если Вы хотите отбросить все процедуры в DB -
SELECT IDENTITY ( int, 1, 1 ) id,
[name]
INTO #tmp
FROM sys.procedures
WHERE [type] = 'P'
AND is_ms_shipped = 0
DECLARE @i INT
SELECT @i = COUNT( id ) FROM #tmp
WHILE @i > 0
BEGIN
DECLARE @name VARCHAR( 100 )
SELECT @name = name FROM #tmp WHERE id = @i
EXEC ( 'DROP PROCEDURE ' + @name )
SET @i = @i-1
END
DROP TABLE #tmp
Это метод, гарантирующий, что CONSTANT
на самом деле не является константой.
Когда компилятор Java видит ссылку на последний статический примитив или String, он вставляет фактическое значение этой константы в класс, который ее использует. Если вы затем измените постоянное значение в определяющем классе, но не перекомпилируете использующий класс, он продолжит использовать старое значение.
Вызов intern () для «константной» строки больше не считается статическая константа компилятором, поэтому используемый класс будет фактически обращаться к члену определяющего класса при каждом использовании.
Цитаты JLS:
определение константы времени компиляции: http://docs.oracle. com / javase / specs / jls / se6 / html / expression.html # 5313
последствия изменений константы времени компиляции (примерно на полпути вниз по странице): http://docs.oracle.com/javase/specs/jls/se6/html/binaryComp.html#45139
Использование intern ()
с константным строковым литералом является пустая трата времени, поскольку литерал уже будет интернирован, как указано в разделе 3.10.5. Строковые литералы из Спецификация языка Java® .
Цитата из Java SE 8 Edition:
Более того, строковый литерал всегда относится к одному и тому же экземпляру класса String. Это связано с тем, что строковые литералы - или, в более общем смысле, строки, которые являются значениями константных выражений (§15.28) - «интернированы», чтобы совместно использовать уникальные экземпляры, используя метод String.intern.
Я полагаю, что кодировщик не сделал этого. Не понимаю этот факт.
Изменить:
Как указал kdgregory , есть влияние на то, как эта константа может быть встроена.
1 - https: //docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5[1215 impression
Некоторое время назад я intern () редактировал все строки, поступающие из файлов классов (для парсера файлов классов). Intern () ing заставил программу использовать меньше памяти (в этом случае не будет, как указывали другие), но это значительно замедлило работу программы (я думаю, что потребовалось 4 секунды, чтобы проанализировать весь rt.jar, и это изменение поставило его более 8 секунд). Изучая его в то время (я думаю, это был JDK 1.4), код intern () довольно уродлив и медленнее, чем, вероятно, должен быть.
Если бы я подумал о вызове intern () в своем коде, я бы сначала профилировал его без intern (), а затем профилируйте его с помощью intern () как для памяти, так и для скорости, и посмотрите, какой из них «хуже» для изменений.
Intern () ing заставил программу использовать меньше памяти (в этом случае не будет, как указывали другие), но это значительно замедлило работу программы (я думаю, что потребовалось 4 секунды, чтобы проанализировать весь rt.jar, и это изменение поставило его более 8 секунд). Изучая его в то время (я думаю, это был JDK 1.4), код intern () довольно уродлив и медленнее, чем, вероятно, должен быть.Если бы я подумал о вызове intern () в своем коде, я бы сначала профилировал его без intern (), а затем профилируйте его с помощью intern () как для памяти, так и для скорости, и посмотрите, какой из них «хуже» для изменений.
Intern () ing заставил программу использовать меньше памяти (в этом случае не будет, как указывали другие), но это значительно замедлило работу программы (я думаю, что потребовалось 4 секунды, чтобы проанализировать весь rt.jar, и это изменение поставило его более 8 секунд). Изучая его в то время (я думаю, это был JDK 1.4), код intern () довольно уродлив и медленнее, чем, вероятно, должен быть.Если бы я подумал о вызове intern () в своем коде, я бы сначала профилировал его без intern (), а затем профилируйте его с помощью intern () как для памяти, так и для скорости, и посмотрите, какой из них «хуже» для изменений.