Skip to content

Commit 3387621

Browse files
java虚拟机开始学习
1 parent 9cf7ef2 commit 3387621

9 files changed

Lines changed: 97 additions & 6 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
/.project
77
/.mvn
88
mvnw
9-
mvnw.cmd
9+
mvnw.cmd

src/main/java/com/sun/proxy/DigestExample.java renamed to src/main/java/com/sun/DigestExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sun.proxy;
1+
package com.sun;
22

33
import org.apache.commons.codec.binary.Base64;
44
import java.io.UnsupportedEncodingException;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sun.proxy;
1+
package com.sun;
22

33
/**
44
* @ClassName Memony
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sun.proxy;
1+
package com.sun;
22

33
import java.util.ArrayList;
44
import java.util.List;

src/main/java/com/sun/proxy/ThreadRun.java renamed to src/main/java/com/sun/ThreadRun.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sun.proxy;
1+
package com.sun;
22

33
/**
44
* @ClassName ThreadRun

src/main/java/com/sun/proxy/ThreadTest.java renamed to src/main/java/com/sun/ThreadTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sun.proxy;
1+
package com.sun;
22

33
import java.util.concurrent.ExecutorService;
44
import java.util.concurrent.Executors;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.sun.jvm.ClassLocader;
2+
3+
import com.basics.ClassLoaderTest.ClassLoaderLoadClass;
4+
5+
/**
6+
* @ClassName VmClassLoader
7+
* @Despacito TODO 学习jvm
8+
* @Author chenzhuo
9+
* @Version 1.0
10+
**/
11+
public class VmClassLoader {
12+
/**
13+
* 实例化在上
14+
* private static Singer singer = new Singer();
15+
* public static int count1 ;
16+
* public static int count2 =0;
17+
* count1:1
18+
* count2:0
19+
* <p>
20+
* <p>
21+
* public static int count1;
22+
* public static int count2 = 0;
23+
* private static Singer singer = new Singer();
24+
* count1:1
25+
* count2:1
26+
* @param args
27+
*/
28+
public static void main(String[] args) {
29+
/* ClassLoader classLoader = ClassLoader.getSystemClassLoader();
30+
classLoader.loadClass();*/
31+
Singer singer = Singer.getInstance();
32+
System.out.println("count1:" + singer.count1);
33+
System.out.println("count2:" + singer.count2);
34+
}
35+
36+
}
37+
38+
class Singer {
39+
public static int count1;
40+
public static int count2 = 0;
41+
private static Singer singer = new Singer();
42+
public Singer() {
43+
count1++;
44+
count2++;
45+
}
46+
47+
public static Singer getInstance() {
48+
return singer;
49+
}
50+
51+
52+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* ClassLoader
3+
* 有大概3个阶段
4+
* 1.加载解析生成 生成到硬盘
5+
* 这里调用的是javac的指令,
6+
* a.查询并且生成类的二进制数据 就是生成.class文件的字节码
7+
* 2.连接
8+
* a.验证
9+
* 1.验证生成的.class文件是否正确(文件头,魔数)
10+
* 2.验证jvm版本 是否合理
11+
* b.准备
12+
* 1.给类的静态变量初始化值
13+
* eg:
14+
* public class A{
15+
* private static int i = 3;
16+
* }
17+
* 这里会先给int i分配内存 并且 赋值为 0
18+
* c.解析
19+
* 1.把类中的符号引用变成直接引用(????)
20+
*
21+
* 3.初始化
22+
* a.给静态变量赋值正确的值 如上eg,会直接赋值为3
23+
*
24+
* 4.初始化
25+
* a.主动使用
26+
* java虚拟机的只有在主动使用的时候才会主动初始化
27+
* 1.new
28+
* 2.读写变量
29+
* 3.调用类的静态方法
30+
* 4.Class.forName
31+
* 5.初始化子类
32+
* 6.标注为启动类的类
33+
* b.被动使用
34+
*/
35+
package com.sun.jvm.ClassLocader;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/**
2+
* 关于虚拟机的学习
3+
*/
4+
package com.sun.jvm;

0 commit comments

Comments
 (0)