Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

314
Vistas
¿Cómo se convierte una condición booleana en un tipo entero en Java sin bifurcar o saltar en el código de bytes compilado y el código de máquina JITed?

Como en el ejemplo dado aquí para C/C++:

... Esto se debe a una nueva técnica descrita en "BlockQuicksort: Cómo las predicciones erróneas de las ramas no afectan a Quicksort" por Stefan Edelkamp y Armin Weiss. En resumen, omitimos el predictor de bifurcación mediante el uso de pequeños búferes (totalmente en la memoria caché L1) de los índices de los elementos que deben intercambiarse. Llenamos estos búferes de una manera sin bifurcaciones que es bastante elegante (en pseudocódigo):

 buffer_num = 0; buffer_max_size = 64; for (int i = 0; i < buffer_max_size; ++i) { // With branch: if (elements[i] < pivot) { buffer[buffer_num] = i; buffer_num++; } // Without: buffer[buffer_num] = i; buffer_num += (elements[i] < pivot); }

¿Cómo se puede lograr lo mismo en Java sin una rama o un salto?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Desafortunadamente, esto no es posible en Java.

Para comprender por qué, eche un vistazo a los tipos nativos detrás de los tipos de Java dentro de la JVM.

Tabla de tipos nativos asignados a tipos Java

DARSE CUENTA:

  • Las primitivas int de Java ( jint ) están respaldadas por enteros con signo de 32 bits.
  • Las primitivas boolean de Java ( jboolean ) están respaldadas por enteros sin signo de 8 bits.

La razón por la que no se puede lanzar entre los dos sin un salto o bifurcación es que la conversión implica necesariamente una comparación con signo y sin signo, y la comparación con signo y sin signo implica necesariamente saltos o ramas. La respuesta a esta pregunta proporciona una buena explicación de por qué.

Básicamente, a nivel de hardware, el procesador en sí mismo no puede realizar comparaciones firmadas y no firmadas en una sola operación. El procesador tiene que hacer la comparación en términos de comparaciones firmado-firmado y sin firmar-sin firmar. Esto requiere un árbol lógico y, por lo tanto, también requiere saltos o bifurcaciones.

TL; DR: la conversión de int a boolean no se puede realizar en Java sin saltos o bifurcaciones en el nivel nativo, porque el boolean no está firmado y el int está firmado y, por lo tanto, una conversión requiere una comparación firmada y no firmada.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda