¿Cómo puedo determinar la dirección en memoria del montón de Java para una JVM que se ejecuta en el proceso actual? Es decir, ¿obtiene un puntero void * o equivalente al área contigua de memoria que la JVM ha asignado para el montón, utilizando Java, C u otras llamadas?¿Cómo obtener la dirección de memoria del montón de Java?
Matlab tiene una JVM incrustada en su proceso. La memoria que asigna la JVM no está disponible para las matrices de Matlab, y de esto, la pila es importante, ya que requiere una gran porción contigua de memoria y nunca se contrae, y Matlab también necesita memoria contigua para sus matrices. Si el montón se reasigna durante la expansión, eso podría provocar la fragmentación.
Me gustaría instrumentar mi proceso para examinar la interacción entre el montón de Java y la vista de memoria de Matlab, y para saber cuándo se mueve debido al cambio de tamaño, preferiblemente todo desde dentro del proceso. Esto necesita la dirección del montón. Es fácil encontrar el tamaño de almacenamiento dinámico de java.lang.Runtime, pero no su dirección en la memoria. ¿Cómo puede hacerse esto?
Estoy ejecutando Sun's JRE 1.6.0_04 en un proceso de Matlab R2008b en Windows XP y Server 2003. Me doy cuenta de que probablemente deba ser una técnica específica del proveedor. El proceso ejecuta el código que hemos escrito, por lo que podemos usar códigos personalizados de Java, Matlab, JNI y C/C++. Las llamadas a métodos Java o los ganchos admitidos en la JVM serían preferibles a la piratería de bajo nivel.
EDITAR: El objetivo de esto es examinar la interacción entre el GC de la JVM y el GC de Matlab. No necesito ver el montón de Java y no leeré nada de ese recuerdo; Solo quiero ver dónde está en el contexto del espacio general de la memoria virtual en el que el GC de Matlab también está tratando de encajar los datos.
¿El objetivo final es el análisis de la interacción de memoria java/matlab? o para acceder a la misma memoria para el almacenamiento de datos? – basszero
@basszero: solo análisis de la interacción de memoria java/matlab. no hay lectura o escritura dentro de ese recuerdo. –