Skip to content

Commit 5339cb7

Browse files
committed
第二周-作业6.(必做)
1 parent 4837b4e commit 5339cb7

File tree

2 files changed

+71
-11
lines changed

2 files changed

+71
-11
lines changed

02nio/GCLogAnalysis.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import java.util.Random;
2+
import java.util.concurrent.TimeUnit;
3+
import java.util.concurrent.atomic.LongAdder;
4+
/*
5+
演示GC日志生成与解读
6+
*/
7+
public class GCLogAnalysis {
8+
// 随机数; 记得这里可以设置随机数种子;
9+
private static Random random = new Random();
10+
public static void main(String[] args) {
11+
// 当前毫秒时间戳
12+
long startMillis = System.currentTimeMillis();
13+
// 持续运行毫秒数; 可根据需要进行修改
14+
long timeoutMillis = TimeUnit.SECONDS.toMillis(1);
15+
// 结束时间戳
16+
long endMillis = startMillis + timeoutMillis;
17+
LongAdder counter = new LongAdder();
18+
System.out.println("正在执行...");
19+
// 缓存一部分对象; 进入老年代
20+
int cacheSize = 2000;
21+
Object[] cachedGarbage = new Object[cacheSize];
22+
// 在此时间范围内,持续循环
23+
while (System.currentTimeMillis() < endMillis) {
24+
// 生成垃圾对象
25+
Object garbage = generateGarbage(100*1024);
26+
counter.increment();
27+
int randomIndex = random.nextInt(2 * cacheSize);
28+
if (randomIndex < cacheSize) {
29+
cachedGarbage[randomIndex] = garbage;
30+
}
31+
}
32+
System.out.println("执行结束!共生成对象次数:" + counter.longValue());
33+
}
34+
35+
// 生成对象
36+
private static Object generateGarbage(int max) {
37+
int randomSize = random.nextInt(max);
38+
int type = randomSize % 4;
39+
Object result = null;
40+
switch (type) {
41+
case 0:
42+
result = new int[randomSize];
43+
break;
44+
case 1:
45+
result = new byte[randomSize];
46+
break;
47+
case 2:
48+
result = new double[randomSize];
49+
break;
50+
default:
51+
StringBuilder builder = new StringBuilder();
52+
String randomString = "randomString-Anything";
53+
while (builder.length() < randomSize) {
54+
builder.append(randomString);
55+
builder.append(max);
56+
builder.append(randomSize);
57+
}
58+
result = builder.toString();
59+
break;
60+
}
61+
return result;
62+
}
63+
}

02nio/README.md

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,21 @@
33

44
## 作业内容
55

6-
> Week02 作业题目(周四)
6+
> Week02 作业题目:
77
8-
1.使用 GCLogAnalysis.java 自己演练一遍串行 / 并行 /CMS/G1 的案例。
9-
2.使用压测工具(wrk 或 sb),演练 gateway-server-0.0.1-SNAPSHOT.jar 示例。
10-
3.(选做) 如果自己本地有可以运行的项目,可以按照 2 的方式进行演练。
11-
4.(必做) 根据上述自己对于 1 和 2 的演示,写一段对于不同 GC 的总结,提交到 Github。
8+
1.(选做)使用 [GCLogAnalysis.java](./GCLogAnalysis.java) 自己演练一遍 串行/并行/CMS/G1 的案例。
9+
2.(选做)使用压测工具(wrk 或 sb),演练 gateway-server-0.0.1-SNAPSHOT.jar 示例。
10+
3.(选做)如果自己本地有可以运行的项目,可以按照 2 的方式进行演练。
11+
4.(必做)根据上述自己对于 1 和 2 的演示,写一段对于不同 GC 和堆内存的总结,提交到 GitHub。
12+
5.(选做)运行课上的例子,以及 Netty 的例子,分析相关现象。
13+
6.(必做)写一段代码,使用 HttpClient 或 OkHttp 访问 http://localhost:8801 ,代码提交到 GitHub
1214

13-
> Week02 作业题目(周六):
14-
15-
1.(选做)运行课上的例子,以及 Netty 的例子,分析相关现象。
16-
17-
2.(必做)写一段代码,使用 HttpClient 或 OkHttp 访问 http://localhost:8801 ,代码提交到 Github。
1815

1916

2017
## 操作步骤
2118

2219

23-
### 第二周-周六-作业2
20+
### 第二周-作业6.(必做)
2421

2522
1. 打开 Spring 官网: https://spring.io/
2623
2. 找到 Projects --> Spring Initializr: https://start.spring.io/

0 commit comments

Comments
 (0)