Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

336
Views
¿Cómo puedo evitar que el compilador y la optimización JIT rompan mi prueba de hardware en Java?

Recientemente descubrí que los bits en las DRAM pueden cambiarse aleatoriamente por la descomposición de las partículas o por los rayos cósmicos. Y me preguntaba con qué frecuencia ocurren estos errores.

Desafortunadamente, la estadística más reciente que encontré es del año 1990 (fuente) , que establece que debe ocurrir un error cada mes por cada 128 MB de memoria.

Como no pude encontrar ninguna estadística reciente de las tasas de errores leves en las RAM modernas, traté de escribir un programa en Java para medir la frecuencia de errores leves en 4 GB de mi RAM. Espero que el programa funcione para detectar todos los errores leves en los 4 GB de RAM asignados, si no se optimizó de ninguna manera.

El problema es que no tengo idea de cómo comprobar si el programa funciona (supongo que no es así debido a la optimización) y no sé cómo cambiarlo para que funcione como se esperaba.

Según las estadísticas de 1990, debería esperar detectar un error cada 22 horas, por lo que necesitaría ejecutar el programa durante casi una semana para afirmar con un 99% de confianza que funciona. Suponiendo que el hardware moderno no tenga una mejor tasa de error suave que en los años 90.

El siguiente bucle es la parte más importante de mi programa:

 int[] memory = new int[1_073_741_824]; // 4GB array, each value initialized to 0 while (true) { for (int i = 0; i < memory.length; i++) { if (memory[i] != 0) { // soft error found memory[i] = 0; // print information about the error in a log file } } // Sleep for a minute }

¿Qué puedo hacer para evitar que la optimización rompa el uso previsto del programa?

PD: si cree que mi código ni siquiera funcionaría sin optimización, explique por qué.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Simple: tan pronto como el cuerpo del bucle haga algo (como simplemente imprimir el índice en el que falló), ¡optimizar el cuerpo del bucle sería inválido!

Y en todo caso, sería el JIT optimizando las cosas, javac no está haciendo mucho más que el plegado constante con respecto a las optimizaciones.

Pero, por supuesto, estaría en el lado seguro al usar lenguajes en los que tiene control total sobre tales cosas.

Más allá de eso: dudo que alguna vez encuentre un error con dicho código.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!