标签:开发者 java并发编程 hashtable hash 显示 name 编译器 math 指针
运行模式
编译执行
解释执行
混合执行
分层编译
AOT(Ahead-of-Time),字节码编译为机器代码,jaotc工具
语言特性
泛型
Lambda特性
基础类库
集合
IO/NIO
网络
并发
安全
ClassLoader(Bootstrap,Application,Extension)
类的加载过程-加载,验证,链接,初始化
SerialGC,Parallel GC,CMS,G1
编译器,运行环境,安全工具,诊断和监控工具
JVM之上的其他语言
jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base
java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld
Throwable和两个子类
Exception,又包括可检测(checked)异常,不检测(unchecked)异常-也就是运行时异常
Error
比如
ClassNotFoundException,运行时通过Class.forName()产生的异常
NoClassDefFoundError,JVM或ClassLoader实例尝试加载类时的异常
try-catch机制,因为创建Throwable要调用native代码fillInStacktrace,会影响性能
fianl,并发时可以省去防御代码,JVM优化时不会final没什么用
finally
finalize,这个会影响垃圾收集性能,现在可以用幻引用+引用队列的方式替代
finalize使用不当会导致死锁,挂起等,java中调用其他语言代码时,这个函数会有用
引用类型
1.强引用
2.软引用Softly Reachable,内存不足时被回收
3.弱引用Weakly Reachable,GC时被回收
4.幻引用Phantom Reachable,始终返回null,通过引用队列可以确定此对象已被回收
引用队列,被回收的对象会放入队列中
软引用的参数
-XX:SoftRefLRUPolicyMSPerMB=N
GC的诊断参数
-XX:+PrintReferenceGC 此参数在JDK9中已不存在
String,StringBuffer,StringBuilder
String的intern()放入PermGen区
-XX:StringTableSize=N
-XX:+PrintStringTableStatistics
SymbolTable statistics:
Number of buckets : 20011
Average bucket size : 1
Variance of bucket size : 1
Std. dev. of bucket size: 1
Maximum bucket size : 5
StringTable statistics:
Number of buckets : 60013
Average bucket size : 0
Variance of bucket size : 0
Std. dev. of bucket size: 0
Maximum bucket size : 3
intern()是一种显示的排重机制,JDK8之后可以自动排重
-XX:+UseStringDeduplication
字符串的一些基础操作会直接利用JVM内部的Intrinsic机制,运行的就是特殊优化的本地代码,不是Java代码生成的字节码,Intrinsic可以理解为一种利用native方式hard-code的逻辑,算是一种特别的内联,有多优化还是需要直接使用特定的CPU指定
java -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining [java类]
51 1 3 java.lang.String::hashCode (55 bytes)
52 2 3 java.lang.String::equals (81 bytes)
53 3 3 java.lang.String::charAt (29 bytes)
@ 18 java/lang/StringIndexOutOfBoundsException::<init> (not loaded) not inlineable
53 4 3 java.lang.String::length (6 bytes)
55 7 n 0 java.lang.System::arraycopy (native) (static)
56 5 3 java.lang.String::indexOf (70 bytes)
@ 66 java.lang.String::indexOfSupplementary (71 bytes) callee is too large
57 6 3 java.lang.Object::<init> (1 bytes)
57 8 3 java.lang.Math::min (11 bytes)
57 9 1 java.lang.ref.Reference::get (5 bytes)
57 10 1 java.lang.ThreadLocal::access$400 (5 bytes)
61 11 3 java.lang.AbstractStringBuilder::append (50 bytes)
@ 5 java.lang.AbstractStringBuilder::appendNull (56 bytes) callee is too large
@ 10 java.lang.String::length (6 bytes)
@ 21 java.lang.AbstractStringBuilder::ensureCapacityInternal (27 bytes)
@ 17 java.lang.AbstractStringBuilder::newCapacity (39 bytes) callee is too large
@ 20 java.util.Arrays::copyOf (19 bytes)
@ 11 java.lang.Math::min (11 bytes)
@ 14 java.lang.System::arraycopy (0 bytes) intrinsic
@ 35 java.lang.String::getChars (62 bytes) callee is too large
61 12 3 java.lang.String::getChars (62 bytes)
@ 9 java/lang/StringIndexOutOfBoundsException::<init> (not loaded) not inlineable
@ 27 java/lang/StringIndexOutOfBoundsException::<init> (not loaded) not inlineable
@ 43 java/lang/StringIndexOutOfBoundsException::<init> (not loaded) not inlineable
@ 58 java.lang.System::arraycopy (0 bytes) intrinsic
Java9自后,引入了Compact Strings的设计,将char[]改为byte[],加载编码的coder加速了性能
相关的Intrinsic也做了重构,但对开发者是透明的
反射
Java9做了模块化对反射做了限制,但兼容老版本
静态代理,动态代理
JDK Proxy
Spring中的cglib实现
集合类
List
Set
Map
Queue/Deuqe
相关的排序算法
Java9的 List.of() 简化创建
Hashtable,HashMap,TreeMap,LinkedHashMap
equals和hashCode
HashMap的容量(capacity)和负载系数(load factor),树化(冲突后的链表长>8)
HashMap中的hash不是用key本身的hashC偶的,而是来自于HashMap内部的另外一个hash函数
将hash的高位移到地位进行异或运算,因为有些数据计算出的哈希值差异主要在高位,而HashMap里的哈希寻址是忽略容量以上的高位,那么这种处理方式就可以有效避免类似情况下的哈希碰撞
开放定址法
基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。
再哈希法
这种方法是同时构造多个不同的哈希函数:
Hi=RH1(key) i=1,2,…,k
当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。
链地址法
这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。
系统架构师之Java并发编程高阶技术+高性能并发框架+源码解析
标签:开发者 java并发编程 hashtable hash 显示 name 编译器 math 指针
原文地址:https://www.cnblogs.com/hadoop22/p/12763319.html