|
8 | 8 |
|
9 | 9 | > Week01 作业题目: |
10 | 10 |
|
11 | | -1.(选做)自己写一个简单的 Hello.java,里面需要涉及基本类型,四则运行,if 和 for,然后自己分析一下对应的字节码,有问题群里讨论。 |
| 11 | +1.(必做)自己写一个简单的 HelloNum.java,里面需要涉及基本类型,四则运行,if 和 for,然后自己分析一下对应的字节码,有问题群里讨论。 |
12 | 12 |
|
13 | 13 | 2.(必做)自定义一个 Classloader,加载一个 Hello.xlass 文件,执行 hello 方法,此文件内容是一个 Hello.class 文件所有字节(x=255-x)处理后的文件。文件群里提供。 |
14 | 14 |
|
|
25 | 25 | ## 操作步骤 |
26 | 26 |
|
27 | 27 |
|
28 | | -### 作业1(选做) |
| 28 | +### 作业1(必做) |
29 | 29 |
|
30 | | -1. 编写代码, 根据自己的意愿随意编写, 可参考: [Hello.java](./Hello.java) |
31 | | -2. 编译代码, 执行命令: `javac -g Hello.java` |
| 30 | +1. 编写代码, 根据自己的意愿随意编写, 可参考: [HelloNum.java](./HelloNum.java) |
| 31 | +2. 编译代码, 执行命令: `javac -g HelloNum.java` |
32 | 32 | 3. 查看反编译的代码。 |
33 | | - - 3.1 可以安装并使用idea的jclasslib插件, 选中 [Hello.java](./Hello.java) 文件, 选择 `View --> Show Bytecode With jclasslib` 即可。 |
34 | | - - 3.2 或者直接通过命令行工具 javap, 执行命令: `javap -v Hello.class` |
| 33 | + - 3.1 可以安装并使用idea的jclasslib插件, 选中 [HelloNum.java](./HelloNum.java) 文件, 选择 `View --> Show Bytecode With jclasslib` 即可。 |
| 34 | + - 3.2 或者直接通过命令行工具 javap, 执行命令: `javap -v HelloNum.class` |
35 | 35 | 4. 分析相关的字节码。【此步骤需要各位同学自己进行分析】 |
36 | 36 |
|
37 | 37 |
|
@@ -113,6 +113,36 @@ java -Xmx2g -Xms2g -XX:+UseG1GC -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCD |
113 | 113 |
|
114 | 114 | 其中 [GCLogAnalysis.java](./GCLogAnalysis.java) 文件也可以从课件资料zip中找到. |
115 | 115 |
|
| 116 | +## 几个命令用法 |
| 117 | +### 1、十六进制方式查看文件 |
| 118 | +`hexdump -C Hello.class` |
| 119 | +输出:`00000000 ca fe ba be 00 00 00 34 00 1c 0a 00 06 00 0e 09` |
| 120 | + |
| 121 | +可以看到magic number: `cafe babe`, |
| 122 | +以及`00 00 00 34`,十六进制34=十进制3*16+4=52,这是jdk8,如果是jdk11则是55,十六进制37. |
| 123 | + |
| 124 | +### 2、Base64方式编码文件 |
| 125 | +`base64 Hello.class` |
| 126 | +### 3、显示JVM默认参数 |
| 127 | +``` |
| 128 | +java -XX:+PrintFlagsFinal -version |
| 129 | +
|
| 130 | +java -XX:+PrintFlagsFinal -version | grep -F " Use" | grep -F "GC " |
| 131 | +
|
| 132 | +java -XX:+PrintFlagsFinal -version | grep MaxNewSize |
| 133 | +
|
| 134 | +``` |
| 135 | + |
| 136 | +### 4、切换不同jdk |
| 137 | +``` |
| 138 | +jenv shell 1.8 |
| 139 | +jenv shell 11 |
| 140 | +``` |
| 141 | +显示所有jdk |
| 142 | +``` |
| 143 | +jenv versions |
| 144 | +``` |
| 145 | + |
116 | 146 | ## 更多资料 |
117 | 147 |
|
118 | 148 | 更多中英文的技术文章和参考资料: <https://github.com/cncounter/translation> |
|
0 commit comments