JVM fuera del montón de direcciones de memoria sujetas a cambio?

Jovan Perovic:

Tenemos una plataforma que depende fuertemente de la memoria fuera de la pila en la JVM. Nos dimos cuenta de que, de vez en cuando, obtenemos SIGSEGV durante el ciclo de GC:

V  [libjvm.so+0x5c56cf]  G1ParScanThreadState::copy_to_survivor_space(InCSetState, oopDesc*, markOopDesc*)+0x4bf

Estoy totalmente de entender que estos son muy difíciles de rastrear, pero hemos empezado estrechando el caso de la raíz.

La pregunta:

Si lo hago:

base = unsafe.allocateMemory(capacity);

y, por supuesto, conservar el basede cancelación de asignación más tarde, puede (en cualquier forma) GC participar y optar por mover mi memoria nativa?

Yo sé que GC no debe tener ningún impacto en este tipo de memoria, pero estoy en busca de tipo de respuesta autorizada a esto.

Eugene:

Eso va a devolver parte puntero de dirección virtual y que yo sepa unsafe.allocateMemorysolo llamará mallocinternamente. Al ser un fuera de la pila de la memoria, obviamente GC no lo toque y que sería tremendamente mal e inesperado si más tarde lo haría Unsafe.freeMemorycon ese puntero, para encontrar solamente que se movía.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=209000&siteId=1
Recomendado
Clasificación