java - maxmetaspacesize - Qué es Klass & KlassKlass
java.lang.outofmemoryerror: metaspace (3)
¿Qué es Klass
& KlassKlass
en la implementación de hotspot JVM?
Por lo que entendí del artículo Presentando la generación de Klass
, Klass
es la representación interna de una clase Java (digamos A
) y contendrá la información básica sobre la estructura de la clase, incluido el código de bytes. Se almacenará como un objeto en sí mismo. Cada objeto de la clase A tendrá un puntero a la representación interna que Klass
presenta en PermGen
KlassKlass es la representación interna de la clase Klass
. ¿Por KlassKlass
se necesita KlassKlass
? ¿Qué información extra está almacenando?
Además, un KlassKlass''s
Klass
KlassKlass''s
apunta a sí mismo, yo tampoco lo entendí.
La generación permanente aka permgen es la referencia al lugar donde se almacena toda la información relacionada con la clase. Es ocasionalmente referido como área de método.
Tomemos un ejemplo del siguiente código:
public class Parent
{
...
}
Aquí:
-
new Parent()
es un objeto de la claseParent
. -
(new Parent()).getClass()
refiere aKlass
of Parent. El tipo de referencia para este objeto seríajava.lang.Class<Parent>
. Esto almacenaría la información sobre las anotaciones de losParent
, constructores, campos, métodos, su herencia (superclase, interfaces), etc. - KlassKlass sería
(new Parent()).getClass().getClass()
. El tipo de referencia para este objeto seríajava.lang.Class<java.lang.Class>
. Esto define la información sobre las anotaciones dejava.lang.Class
, constructores, campos, métodos, su herencia (superclase, interfaces), etc.
Teóricamente, esta cadena podría continuar pero KlassKlassKlass sería igual que KlassKlass.
En resumen, KlassKlass significa que tendría un objeto java.lang.Class
que define el comportamiento de java.lang.Class
.
Espero que esto ayude
Parece que tienes un buen conocimiento general de la administración de almacenamiento en HotSpot. Para obtener algunos detalles más específicos, es una buena idea ir a la boca del caballo, en este caso los desarrolladores de HotSpot. Esta página es su descripción del sistema de gestión de almacenamiento.
En situaciones en las que quiero descubrir qué código intento, encuentro el código y lo leo. En este caso podemos encontrar una implementación de la clase KlassKlass here . Parece que esto no agrega información adicional a Klass , lo que es muy interesante de ver. Tenga en cuenta que KlassKlass
extiende Klass
.
Entonces, ¿por qué lo necesitamos? Bueno, podemos dibujar la jerarquía de Klass
de un programa en particular como un árbol donde Klass
describe otro. Todo necesita una descripción, pero no podemos seguir así para siempre, necesitamos encontrar un punto fijo en el que lo que usamos para describir algo sea en sí mismo, ¡así que podemos detenernos!
Entonces, en resumen, KlassKlass
no hace nada más útil que existente. Necesita existir pero su existencia es razonablemente poco interesante.
Un klass se puede definir como una plantilla / impresión azul que describe los comportamientos / estados que el objeto de su tipo admite.