- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
JDK10 可以使用 var 进行 局部变量类型推断。
var str = "abc"; // 推断为 字符串类型
var l = 10L; // 推断为long 类型
var flag = true; // 推断为 boolean 类型
var list = new ArrayList<String>(); // 推断为 ArrayList<String>
var stream = list.stream(); // 推断为 Stream<String>
局部变量类型推断使用场景如下:
public class demo01var {
// var x = 10; // 成员变量不能使用var
public static void main(String[] args) {
var a = 1;
var str = "abc";
var flag = true;
var list = new ArrayList<String>();
list.add("aa");
var stream = list.stream();
for (var s : list) {
System.out.println(s);
}
for (var i = 0; i < 10; i++) {
var x = 5;
}
}
}
局部变量类型推断不能使用场景
public class demo01var {
// var x = 10; // 成员变量不能使用var
// 参数不能使用var
// public static void test01(var a) {}
/* 方法返回类型不能使用var
public static var test02() {
return true;
}*/
}
局部变量类型推断注意事项
// var 并不是一个关键字,而是一个保留的类型名称,这意味着可以将一个变量、方法、包名写成 `var`。
public static void test03() {
var var = 10; System.out.println("var = " + var);
}
// var 不能用来声明没有赋值的变量、不能用于声明多个变量的情况。
public static void test04() {
// var x = null;
// 不行,推断不出到底是什么类型
int x = 1, y = 2; // 可以
// var m = 1, n = 2; // 不行
}
G1 是设计来作为一种低延时的垃圾回收器。G1收集器还可以进行非常精确地对停顿进行控制。从JDK7开始启用G1
垃圾回收器,在JDK9中G1成为默认垃圾回收策略。截止到ava 9,G1的Full GC采用的是单线程算法。也就是说G1在
发生Full GC时会严重影响性能。
JDK10又对G1进行了提升,G1 引入并行 Full GC算法,在发生Full GC时可以使用多个线程进行并行回收。能为用户
提供更好的体验。
JDK 5中引入的类数据共享,将一组类预处理为共享的存档文件,然后可以在运行时对其进行内存映射以减少启动时
间。当多个JVM共享同一个存档文件时,它还可以减少动态内存占用。
JDK 5仅允许引导类加载器加载归档的类。JDK10对应用程序类数据共享进行了扩展,允许“应用程序类加载器”,内置
平台类加载器和自定义类加载器加载已归档的类。
Safepoint是Hotspot JVM中一种让应用程序所有线程停止的机制。为了要做一些非常之安全的事情,需要让所有线
程都停下来它才好做。比如菜市场,人来人往,有人忽然要清点人数,这时候,最好就是大家都原地不动,这样也好
统计。Safepoint起到的就是这样一个作用。
JVM会设置一个全局的状态值。应用线程去观察这个值,一旦发现JVM把此值设置为了“大家都停下来”。此时每个应
用线程就会得到这个通知,然后各自选择一个point(点)停了下来。这个点就叫Safepoint。待所有的应用线程都停
下来了。JVM就开始做一些安全级别非常高的事情了。
比如下面这些事情:
垃圾清理暂停。类的热更新。偏向锁的取消。各种debug操作。
然而,让所有线程都到就近的safepoint停下来本是需要较长的时间。而且让所有线程都停下来显得有些粗暴。
为此Java10就引入了一种可以不用stop all threads的方式,就是Thread Local Handshake(线程本地握手)。
该新特性的效果
线程本地握手是在 JVM 内部相当低级别的更改,修改安全点机制,允许在不运行全局虚拟机安全点的情况下实现线
程回调,使得部分回调操作只需要停掉单个线程,而不是停止所有线程。
NVDIMM-非易失性双列直插式内存模块(英语:non-volatile dual in-line memory module,缩写NVDIMM)特
点:价格便宜,速度比DRAM慢,断电能保留数据。
随着廉价的NV-DIMM内存的可用性,未来的系统可能会配备异构内存架构。除了DRAM之外,这种架构还将具有一
种或多种具有不同特性的非DRAM存储器。
该JEP的目标是无需更改现有的应用程序代码可以代替DRAM用于对象堆。所有其他内存结构(例如代码堆,元空
间,线程堆栈等)将继续驻留在DRAM中。
应用场景
Java编译器指的是JDK自带的javac指令。这一指令可将Java源程序编译成.class字节码文件(bytecode)。字节码无法直
接运行,但可以被不同平台JVM中的 interpreter(解释器) 解释执行。由于一个Java指令可能被转译成十几或几十个对
等的微处理器指令,这种模式执行的速度相当缓慢。
由于interpreter效率低下,JVM中又增加JIT compiler(即时编译器,just in time)会在运行时有选择性地将运行次
数较多的方法编译成二进制代码,直接运行在底层硬件上。
花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在JIT编译时所额外花费的时间可能比interpreter解释器执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。
Graal是基于Java的JIT编译器,这项 JEP 将 Graal 编译器研究项目引入到 JDK 中。为了让 JVM 性能与当前 C++ 所写版
本匹敌(或有幸超越)提供基础。
javah 用于生成C语言的头文件。
从JDK8开始,javah的功能已经集成到了javac中。去掉javah工具。
javac -h . 文件名.java
JDK10 给 java.util 包下的List、Set、Map新增加了一个静态方法 copyOf 。copyof方法将元素放到一个不可修改的集
合并返回。
class Main {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>(3);
list.add(1);
list.add(2);
list.add(3);
List<Integer> temp = List.copyOf(list);
temp.add(4);
}
}
copyOf方法返回的是一个不可变集合,例如list返回的不可变的内部类list
JDK10 给 InputStream 和 Reader 类中新增了 transferTo 方法, transferTo 方法的作用是将输入流读取的数据
使用字符输出流写出。可用于复制文件等操作。
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
long nums = reader.transferTo(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"))));
System.out.println("一共复制的字节数量: "+nums);
其实他的源码也非常简单,就是一个简单的封装:
public long transferTo(Writer out) throws IOException {
Objects.requireNonNull(out, "out");
long transferred = 0;
char[] buffer = new char[TRANSFER_BUFFER_SIZE];
int nRead;
while ((nRead = read(buffer, 0, TRANSFER_BUFFER_SIZE)) >= 0) {
out.write(buffer, 0, nRead);
transferred += nRead;
}
return transferred;
}
在JDK10中给IO流中的很多类都添加了带Charset参数的方法,比如PrintStream,PrintWriter,Scanner。通过Charset可以指定编码来操作文本。Charset是一个抽象类,我们不能直接创建对象,需要使用Charset的静态方法forName(“编码”),返回Charset的子类实例。
JDK10给 ByteArrayOutputStream 新增重载 toString(Charset charset) 方法,通过指定的字符集编码字节,将缓冲区的内容转换为字符串。
通过ByteArrayOutputStream新增的toString(Charset), 可以将字节数组输出流中的数据按照指定的编码转成字符串
String str = "你好中国";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("GBK"));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
//默认utf-8
System.out.println(bos.toString());
System.out.println(bos.toString("GBK"));
目录 C#特性 1. 概括 2. 语法 定义特性类 应用特性
是否有关于 Python 语言必须提供哪些功能的文章/论文?为什么应该使用 Python 而不是任何其他语言? Python 的优点和缺点是什么? 最佳答案 Why Python和 Why Pytho
我想弄清楚为什么 .x比*.x具有更高的特异性当后者有望获胜时。 不是*.x应该具有 0-0-1-1 的特异性(1 个类,1 个标签)而 .x只是一个类(class) 0-0-1-0 ? 考虑以下基本
在尝试评估非 instanceof 条件时,我发现了我在 Groovy 2.4.7、1.6.0 JVM 中没有预料到的行为。 总之: class Foo { static Boolean
当使用可变结构和属性时,编译器可以解决一些问题,但不能对其他相当明显的事情做同样的事情,这对我来说似乎很奇怪。 以下面的自动属性为例: Vector2 Vector { get; set; } 而不是
我对 ES3 有一定的了解,但我对 ES5 的特性不是很了解。我 - 或多或少 - 知道: Object.create(), Object.freeze() “使用严格” getter 和 sette
我最近开始将 Django 1.5.4 用于带有 MySQL 后端的 Web 应用程序。就在一开始,我遇到了某些限制,这让我想知道 Django 是否是继续前进的正确方法。 一些明显的缺点是: 缺少复
在函数模板的定义中,模板参数的实例化一般是未知的。类型特征可用于在编译时获取一些信息。例如,这是 is_pointer 的一个简单应用: template void foo(T p) { cout
我正在设计页面的样式,该页面具有除最后一个框外的带底部边框的连续框。我为所有框应用类 .box 并添加 .box_last 以仅隐藏最后一个框的边框。 .box { border-bottom-s
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有兴趣编制一份不建议在嵌入式系统中使用的 c++ 功能列表(这可能会导致人们推荐使用 c 而不是 c++)。如果您知道,请尝试添加原因,或者将您的原因添加到其他人的答案中。 这是一个开始(我知道的唯
作为一名 Ruby 程序员,您是否曾觉得任何使用起来有点冒险的功能,可能是因为它的奇怪行为?它可能有很好的文档记录,但在调试时很难找到,或者难以记住? 我通常尽量远离 String#gsub!。文档说
我正在开发一个连接到健身 watch 的蓝牙应用程序。这是我第一次使用蓝牙。我设法使用出色的 FlutterBlue 将我的应用程序与设备连接起来图书馆。 但是我无法理解我从阅读中获得的结果。这是我阅
1. 迭代器(Iterator)的介绍 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。 定义:迭代器是一种检
嗨,伙计们,有没有动态更改 Spring 属性文件内容的好例子?如果您能给我一些示例或链接,我将不胜感激。 非常感谢 最佳答案 我想你可以使用 ReloadableResourceBundleMess
SystemVerilog 引入了一些非常有用的结构来改进编码风格。然而,正如我的一位同事经常说的,“你不是在写软件,你是在描述硬件。”考虑到这一点,当最终结果需要合成时,应该避免语言的哪些特征?这个
我定义了这些测试依赖项 / Test Dependencies lazy val wiremock = "com.github.tomakehurst" % "wir
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我有兴趣提高我的设计能力(设计具有属性、方法等的类)。即如何决定类、方法和属性应该是什么? 你们能建议我改进这个的好 Material 吗? 最佳答案 请看: Any source of good o
我是一名优秀的程序员,十分优秀!