alocação de memory para uma class em java?

A class B herda class A. Agora, quando criamos um object do tipo B, qual é a memory alocada para B? Está incluindo A e B ou qualquer outro procedimento para alocação de memory?

Quando você cria o object B, digamos chamando o construtor padrão

B myObject = new B(); 

Em seguida, a JVM aloca um object com mais ou menos:

  • Memória suficiente para cada campo explicitamente declarado em B (geralmente em torno de 4 a 8 bytes por campo, mas varia muito de tipos e do sistema host)
  • Memória suficiente para cada campo eventual herdado por A e seus ancestrais
  • Memória suficiente para conter uma referência ao vetor de despacho (que também deve ter em torno de 4 a 8 bytes)

O vetor de dispatch é usado pelo compilador para armazenar o endereço de cada método que pode ser invocado no object dado e depende da class do object em vez da instância do próprio object (todo object B tem a mesma interface depois de tudo) !)

Então você não precisa alocar A, porque não há nenhum object separado A. Você não está instanciando 2 objects separados. Quando você cria B, você está criando uma versão “especializada” de A, que pode ser vista como A com algo mais. Portanto, apenas B precisa ser alocado (mas tenha em mente que B também tem tudo que seus ancestrais têm)

Sim. Objetos do tipo B contêm a parte de A quando são alocados. Não precisa se preocupar com isso (ou seja, não há necessidade de alocar B e A).

Quando você instanciar um B por meio de um new B() , uma chamada implícita (ou explícita) é feita para o construtor de A. A alocação de memory é feita para ambas as classs.

Mais especificamente, se A declarar três membros inteiros e B (estender A) declarar 2 membros flutuantes, cada novo B alocará três ints e dois floats.