Java基础篇(JVM)——字节码详解

这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎会好些,所以这篇改成详解字节码。

由于Java纯面向对象的特性,字节码只要能表示一个类的信息,就可以表示整个Java程序了,JVM只要能加载一个类的信息,就能加载整个程序了。所以,不管是字节码,还是JVM加载机制,关注点都是在类。我关注的点主要在于:

1. 由于字节码不是一次性全部加载进入内存,那么JVM是如何知道自己要加载的类信息在.class文件的哪个位置的?

2. 字节码是如何表示类信息的?

3. 字节码会进行程序的优化吗?

第一个问题很简单,因为哪怕一个源文件有很多个类(只有一个public类),编译器也会为其中每个类都生成一个.class文件,JVM加载时按照需要加载的类名称加载即可。

要解决后面的问题,首先我们来看字节码的组成(Mac下用Hex Fiend打开)。

对这样一段代码:

package com.test.main1; public class ByteCodeTest { int num1 = 1; int num2 = 2; public int getAdd() { return num1 + num2; } } class Extend extends ByteCodeTest { public int getSubstract() { return num1 - num2; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjjjf.html