Почему Java оскорбляет мое использование Long. parseLong (String s, int radix) с этим длинным двоичным числом?

Я наблюдал много «интроспективного» кода в приложениях, которые часто неявно полагаются на их содержащие методы , а не , чтобы их правильность была встроена. Такие методы обычно включают вызовы:

  • MethodBase.GetCurrentMethod
  • Assembly.GetCallingAssembly
  • Assembly.GetExecutingAssembly

Теперь я нахожу информацию, касающуюся этих методов, очень запутанной. Я слышал, что во время выполнения не будет встроен метод, вызывающий GetCurrentMethod, но я не могу найти никакой документации по этому поводу. Я несколько раз видел сообщения на StackOverflow, например этот , указывает, что среда CLR не встраивает вызовы кросс-сборки, но документация GetCallingAssembly категорически указывает на обратное.

Существует также сильно критикуемый [MethodImpl (MethodImplOptions.NoInlining)] , но я не уверен, считает ли CLR это «запросом» или «командой».

Обратите внимание, что я спрашиваю о встраивании правомочности с точки зрения контракта, не о том, когда текущие реализации JITter отказываются рассматривать методы из-за трудностей реализации, или о том, когда JITter, наконец, завершает выбор для встраивания подходящего метода после оценки компромиссов. Я прочитал это и это , но они, кажется, больше сосредоточены на последних двух пунктах (есть случайные упоминания MethodImpOptions.NoInlining и «экзотических инструкций IL», но они, кажется, представлены как эвристика, а не как обязательства ).

Когда CLR разрешено встроить?

37
задан Community 23 May 2017 в 11:47
поделиться