对于任何在动态系统中优化程序启动速度或者代码部署速度,类加载都是本质瓶颈
类数据(Java字节码)通常不能被快速访问。
该数据必须从磁盘或者网络加载,必须能在类路径上的某个jar文件中找到
必须能在某个类加载器中找到
JDK11对于类加载的提升
是JVM之间共享类元数据的一种机制,当机器运行多个jvm,对内存有帮助
通常每个jvm都有自己的类元数据,如果该元数据是共享,只需要在内存中保留一份副本
加快类加载速度的最佳方法是为应用程序创建一个类数据共享存档,不需要修改代码。
Random类nextGaussian方法是同步,多线程会阻塞
ThreadLocalRandom 单独线程版本,每个线程有自己的生成器,排除同步问题
实现典型的伪随机算法,算法具有确定性,如果确认种子则可确定该引擎生成的数列
SecureRandom
通过一个系统接口为随机数获取种子
该数据的生成方式和操作系统相关,并且基于真正的随机事件,基于熵的随机性(entropy-based randomness)
Java区分两个随机数源:生成种子和生成随机数
在Linux系统上
/dev/random
是一个阻塞设备,系统熵池中随机数不足读取会阻塞,直到系统熵池中的随机数足够
/dev/urandom
不会阻塞读取操作
cat /proc/sys/kernel/random/write_wakeup_threshold
显示linux系统内核随机生成器的写入唤醒值
通过配置java安全随机数生成器获取种子和随机数
1.Djava.security.egd=file:/dev/urandom
2.在jdk配置中修改
/jdk/conf/security/java.security中修改,默认已经修改linux系统配置
java.policy基于java安全模型的规则,可根据本地需求进行修改
代码来源:可执行代码和作用域
代码签名:需要数字签名的代码和作用域
权限设置:代码执行权限,访问本地文件和网络
类加载:规定哪些类可以被加载和执行,并且控制加载行为
安全管理器:规定自定义安全管理器行为