类加载过程第一步,加载,主要干了三件事:
1.通过全类名获取该类的字节码文件,并将其加载成二进制字节流
2.将字节流所代表的静态存储结构(编码结构)转换为方法区的运行时数据结构(运行时的内存结构)3.在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口
package com.tan.classloading;
//静态存储结构
public class Cola {
private int price =2;
private static int capacity = 330;
static {
int invent_date = 18860508;
}
public Cola(){
price = 3;
price = 5;
}
}
//通过查看字节码文件,观察运行时的内存结构
Classfile /D:/220106/code/Jvm/target/classes/com/tan/classloading/Cola.class
Last modified 2022-6-10; size 449 bytes
MD5 checksum e6d9a0cd5658f8b7f42c72225c62fbbe
Compiled from "Cola.java"
public class com.tan.classloading.Cola
minor version: 0
major version: 49
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #6.#20 // java/lang/Object."<init>":()V
#2 = Fieldref #5.#21 // com/tan/classloading/Cola.price:I
#3 = Fieldref #5.#22 // com/tan/classloading/Cola.capacity:I
#4 = Integer 18860508
#5 = Class #23 // com/tan/classloading/Cola
#6 = Class #24 // java/lang/Object
#7 = Utf8 price
#8 = Utf8 I
#9 = Utf8 capacity
#10 = Utf8 <init>
#11 = Utf8 ()V
#12 = Utf8 Code
#13 = Utf8 LineNumberTable
#14 = Utf8 LocalVariableTable
#15 = Utf8 this
#16 = Utf8 Lcom/tan/classloading/Cola;
#17 = Utf8 <clinit>
#18 = Utf8 SourceFile
#19 = Utf8 Cola.java
#20 = NameAndType #10:#11 // "<init>":()V
#21 = NameAndType #7:#8 // price:I
#22 = NameAndType #9:#8 // capacity:I
#23 = Utf8 com/tan/classloading/Cola
#24 = Utf8 java/lang/Object
{
public com.tan.classloading.Cola();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_2
6: putfield #2 // Field price:I
9: aload_0
10: iconst_3
11: putfield #2 // Field price:I
14: aload_0
15: iconst_5
16: putfield #2 // Field price:I
19: return
LineNumberTable:
line 9: 0
line 4: 4
line 10: 9
line 11: 14
line 12: 19
LocalVariableTable:
Start Length Slot Name Signature
0 20 0 this Lcom/tan/classloading/Cola;
static {};
descriptor: ()V
flags: ACC_STATIC
Code:
stack=1, locals=1, args_size=0
0: sipush 330
3: putstatic #3 // Field capacity:I
6: ldc #4 // int 18860508
8: istore_0
9: return
LineNumberTable:
line 5: 0
line 7: 6
line 8: 9
LocalVariableTable:
Start Length Slot Name Signature
}
SourceFile: "Cola.java"