Estoy escribiendo una aplicación que tendrá varios subprocesos en ejecución, y quiero acelerar el uso de CPU/memoria de esos subprocesos.¿Disminuye el uso de CPU/memoria de un subproceso en Java?
Hay un similar question for C++, pero quiero intentar y evitar el uso de C++ y JNI si es posible. Me doy cuenta de que esto podría no ser posible utilizando un lenguaje de nivel superior, pero tengo curiosidad por ver si alguien tiene alguna idea.
EDIT: Se ha añadido una recompensa; Me gustaría algunas ideas realmente buenas y bien pensadas sobre esto.
EDIT 2: La situación que necesito para esto es ejecutar el código de otras personas en mi servidor. Básicamente es un código completamente arbitrario, con la única garantía de que habrá un método principal en el archivo de clase. Actualmente, varias clases completamente dispares, que se cargan en tiempo de ejecución, se ejecutan simultáneamente como subprocesos separados.
De la forma en que está escrito, sería una molestia refactorizar para crear procesos separados para cada clase que se ejecuta. Si esa es la única buena forma de limitar el uso de la memoria a través de los argumentos de VM, entonces que así sea. Pero me gustaría saber si hay una manera de hacerlo con hilos. Incluso como un proceso separado, me gustaría poder limitar de alguna manera el uso de la CPU, ya que como mencioné anteriormente, varios de ellos se ejecutarán a la vez. No quiero un bucle infinito para acaparar todos los recursos.
EDIT 3: Una manera fácil de aproximar el tamaño del objeto es con las clases Instrumentation de java; específicamente, el método getObjectSize. Tenga en cuenta que se necesita alguna configuración especial para usar esta herramienta.
¿Qué estás usando para un modelo de subprocesamiento? ¿Los ejecutores de tareas Java? –
Además, ¿dónde están sus cuellos de botella en esta aplicación? ¿Base de datos? IO? –
La única vez que puedo pensar dónde querría limitar la CPU era si la duración de la batería era un problema (y entonces se hace su pregunta, ¿cómo descubro cuando estoy haciendo cosas computacionalmente caras en un dispositivo de batería limitada?) . De lo contrario, ¿por qué hacer que el usuario espere más de lo necesario? Si desea mantener la capacidad de respuesta del sistema, use prioridad de subproceso bajo en lugar de intentar limitar el uso de CPU. –