// 编译器能根据右边的表达式自动推断类型
// var的好处是在使用lambda表达式时给参数加上注解
var str = "abc";
System.out.println(str.getClass()); //class java.lang.String
Consumer<Integer> consumer = (@Deprecated var x) -> System.out.println(x);
var
“关键字”并非正在的关键字,变量依旧可以用var
命名,var
“关键字”只是一个语法糖
// 判断字符串是否为空白
"\t ".isBlank(); // ture
// 去除首尾空白
"\t [content] ".strip(); // [content]
// 去除首部空格
"\t [content] ".stripLeading(); // [content]空格空格
// 去除尾部空格
"\t [content] ".stripTrailing(); // 空格空格[content]
// 复制字符串
"Java ".repeat(3); // Java Java Java
// 行数统计
"A\nB\nC".lines().count(); // 3
strip与trim的区别时trim不能去除非英文的空格,strip可以去除所有字符集的空格
public class HttpClientTest {
public static void main(String[] args) throws Exception {
// 创建HttpClient
HttpClient httpClient = HttpClient.newHttpClient();
// 创建Request
HttpRequest request = HttpRequest.newBuilder(URI.create("http://www.baidu.com")).build();
// send同步发送数据,并指定Resopnse的Body如何处理
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
// 打印headers和body
System.out.println(response.headers());
System.out.println(response.body());
// sendAsync异步发送
httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);
}
}
Flight Recorder
源自飞机的黑盒子,以前是商业版的特性现Oracle将其开源用于监视JVM
。JFR
的可监视生产环境且性能开销最大不超过1%
# 开启JFR,会显示记录id
jcmd <pid> JFR.start
# 指定生成文件,和开启时显示的记录id
jcmd <pid> JFR.dump filename=recording.jfr name=num
# 关闭JFR,需指定记录id
jcmd <pid> JFR.stop name=num
# 打印JFR所有信息
jfr print recording.jfr
# 打印指定事件信息
jfr print --events CPULoad,GarbageCollection recording.jfr
# 打印指定时间信息用json格式
jfr print --json --events CPULoad recording.jfr
# 打印指定分类信息信息
jfr print --categories "GC,JVM,Java*" recording.jfr
# 打印JDK事件并指定栈深度
jfr print --events "jdk.*" --stack-depth 64 recording.jfr
# 打印统计信息
jfr summary recording.jfr
# 打印元信息
jfr metadata recording.jfr