Java 学习笔记
Java 学习笔记
String.matches() 性能测试
测试机:Mac Pro 16GB 2667 MHz DDR4; 2.6GHz 六核Intel Core i7
- String.matches(“[0-9]+”) 1亿次 19880毫秒
- Pattern.compile(“[0-9]+”).matcher(“[0-9]+”).matches() 1亿次 4390毫秒
public class Test {
@Test
public void isNumber() {
String keyword = "1223323";
final long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
isNumber(keyword);
}
System.out.println("耗时: " + (System.currentTimeMillis() - startTime));
System.out.println(keyword + " 是纯数字: " + isNumber(keyword));
}
/**
* 纯数字(正整数)
*/
private static final Pattern POSITIVE_NUMBER = Pattern.compile("[0-9]+");
public static boolean isNumber(String keyword) {
if (Objects.isNull(keyword)) {
return false;
}
// 就换这两行代码测试
// return POSITIVE_NUMBER.matcher("[0-9]+").matches();
return keyword.matches("[0-9]+");
}
}
Java移位运算
- 左移运算符(X2)
<<
num << 1,相当于num乘以2 - 右移运算符(/2)
>>
num >> 1,相当于num除以2 - 无符号右移
>>>
忽略符号位,空位都以0补齐
ArrayList和LinkedList的大致区别如下:
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
常见加密算法
- 对称加密算法主要有:DES、3DES、AES
- 非对称加密算法主要有:RSA、DSA
- 散列算法:SHA-1、MD5
堆大小设置
JVM 中最大堆大小有三方面限制:
- 相关操作系统的数据模型(32-bt还是64-bit)限制;
- 系统的可用虚拟内存限制;
- 系统的可用物理内存限制。
- 32位系统下,一般限制在1.5G~2G;
- 64为操作系统对内存无限制。
辅助信息
JVM提供了大量命令行参数,打印信息,供调试使用。主要有以下一些:
-XX:+PrintGC
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails
[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析。
常见配置汇总
堆设置
- -Xms:初始堆大小
- -Xmx:最大堆大小
- -XX:NewSize=n:设置年轻代大小
- -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
- -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
- -XX:MaxPermSize=n:设置持久代大小
收集器设置
- -XX:+UseSerialGC:设置串行收集器
- -XX:+UseParallelGC:设置并行收集器
- -XX:+UseParalledlOldGC:设置并行年老代收集器
- -XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息
- -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintGCTimeStamps
- -Xloggc:filename
并行收集器设置
- -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数;
- -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间;
- -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)。
并发收集器设置
- -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况;
- -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。