sun.misc.Contended не является членом пакета sun.misc Scala - PullRequest
0 голосов
/ 02 февраля 2019

Я обновляю версию JDK с 8 до 11 и получаю проблему с некоторой параллельной структурой данных.

error: type Contended is not a member of package sun.misc
[ERROR] @sun.misc.Contended
[ERROR]           ^
[ERROR] one error found

Есть ли способ обойти это?Я использую Scala 2.12.8?

1 Ответ

0 голосов
/ 02 февраля 2019

Если вы используете эту аннотацию в своем коде пользователя, вы должны просто удалить ее, поскольку она ничего не делает.

Hotspot позволяет использовать эту аннотацию в привилегированном коде.From classFileParser.cpp :

AnnotationCollector::ID
AnnotationCollector::annotation_index(const ClassLoaderData* loader_data,
                                      const Symbol* name) {
  const vmSymbols::SID sid = vmSymbols::find_sid(name);
  // Privileged code can use all annotations.  Other code silently drops some.
  const bool privileged = loader_data->is_the_null_class_loader_data() ||
                          loader_data->is_platform_class_loader_data() ||
                          loader_data->is_anonymous();
  switch (sid) {
...
    case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_vm_annotation_Contended_signature): {
      if (_location != _in_field && _location != _in_class) {
        break;  // only allow for fields and classes
      }
      if (!EnableContended || (RestrictContended && !privileged)) {
        break;  // honor privileges
      }
      return _jdk_internal_vm_annotation_Contended;
    }

Если аннотация используется вне привилегированного кода, она обычно игнорируется.


Но! похоже, что существует флаг производственного уровня, позволяющий включить @Contended специально для непривилегированных классов.

В этом случае вы можете использовать --add-exports java.base/jdk.internal.vm.annotation=<your module> при компиляции и импортировать аннотацию из jdk.internal.vm.annotation.

Тогда при запуске приложения используйте -XX:-RestrictContended.

...