[toc]
java
1. 基础
1.1 面向对象三大特征
- 封装: 对象属性私有话,只提供外界访问方法
- 继承: 在已存在类基础上建立新类,增加新的数据,功能; 但是不能选择性基础父类
- 多态: 程序定义的引用变量指向的具体类型,方法在运行期间确定
1.2. 多态类型
- 编译时多态: 主要是指方法的重载. 根据参数列表不同, 通过编辑变为两个不同的函数
- 运行时多态: 动态绑定, 运行时才能确定具体调用的哪个类中实现方法
[toc]
[toc]
**分布式(distributed)**为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段, 将一个业务拆分成不同的子业务, 分布在不同的机器上执行, 服务之间通过远程调用协调工作, 堆外提供服务.
实现方式:
水平扩展: 增加机器的方式, 将流量平分到所有服务器, 所有机器都可以提供相同服务.
垂直拆分: 不同业务需求分发到不同机器上.
集群(cluster): 多台不同的服务器部署相同应用或者模块, 构成一个集群, 通过负载均衡设备对外提供服务.
[toc]
相同类型的元素(element)组成,并且使用一块连续的内存来存储.
可以利用元素的索引(index)可以计算出该元素对于的存储地址.
特点: 提供随机访问并且容量有限
访问: O(1) // 访问特定位置元素
插入: O(n) // 最坏情况插入在头部并需要移动所有元素
删除: O(n) // 最坏情况删除在头部并需要移动所有元素
相同类型的元素(element)组成, 并不会按线性顺序存储数据, 使用不连续的内存空间来存储数据.
[toc]
OSI体系结构 | TCP/IP体系结构 | 5层协议体系结构 |
---|---|---|
7 应用层 | 应用层(各种协议如TELNET,FTP,SMTP等) | 5 应用层 |
6 表示层 | ^ | ^ |
5 会话层 | ^ | ^ |
4 运输层 | 运输层(TCP/UDP) | 4 运输层 |
3 网络层 | 网际层IP | 3 网络层 |
2 数据链路层 | 网络接口层 | 2 数据链路层 |
1 物理层 | ^ | 1 物理层 |
g1 gc
-XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
-XX:-OmitStackTraceInFastThrow // 关闭堆栈省略(只会jdk内部异常,实际不需要)
-Xlog:gc*=debug:file=${LOG_PATH}/gc%t.log:utctime,level,tags:filecount=50,filesize=100M // gc日志
-Xlog:jit+compilation=info:file=${LOG_PATH}/jit_compile%t.log:utctime,level,tags:filecount=10,filesize=10M // jit日志
-Xlog:safepoint=debug:file=${LOG_PATH}/safepoint%t.log:utctime,level,tags:filecount=10,filesize=10M // safepoint日志
-Dfile.encoding=UTF-8 // 文件默认utf8
-Djava.security.egd=file:/dev/./urandom // 替换随机数生成器
-Dnetworkaddress.cache.ttl=10 // dns缓存刷新时间
-Xms2048m
-Xmx2048m
-Xmn1280m
-Xss512k // 线程栈大小
-XX:MaxDirectMemorySize=1024m // 堆外内存大小
-XX:MetaspaceSize=384m // 元空间
-XX:ReservedCodeCacheSize=256m // JIT编译后(c1,c2优化后)代码占用内存
-XX:+DisableExplicitGC // 关闭显示gc调用(System.gc()触发的 FullGC)
-XX:MaxGCPauseMillis=50 // 目标最大 STW(Stop-the-world)时间
-XX:-UseBiasedLocking // 禁用偏向锁
-XX:GuaranteedSafepointInterval=0 // 禁用定时安全点任务
-XX:+UseCountedLoopSafepoints // 防止大有界循环带来的迟迟不进入安全点导致 GC STW 时间过长
-XX:StartFlightRecording=disk=true,maxsize=4096m,maxage=3d
-XX:FlightRecorderOptions=maxchunksize=128m
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/jdk.internal.access=ALL-UNNAMED
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED
G1GC
-XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:-OmitStackTraceInFastThrow -Xlog:gc*=debug:file=${LOG_PATH}/gc%t.log:utctime,level,tags:filecount=50,filesize=100M -Xlog:jit+compilation=info:file=${LOG_PATH}/jit_compile%t.log:utctime,level,tags:filecount=10,filesize=10M -Xlog:safepoint=debug:file=${LOG_PATH}/safepoint%t.log:utctime,level,tags:filecount=10,filesize=10M -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Dnetworkaddress.cache.ttl=10 -XX:MaxRAMPercentage=45 -XX:InitialRAMPercentage=45 -XX:+AlwaysPreTouch -Xss512k -XX:MaxDirectMemorySize=1024m -XX:MaxMetaspaceSize=384m -XX:ReservedCodeCacheSize=256m -XX:+DisableExplicitGC -XX:MaxGCPauseMillis=50 -XX:-UseBiasedLocking -XX:GuaranteedSafepointInterval=0 -XX:+UseCountedLoopSafepoints -XX:+SafepointTimeout -XX:SafepointTimeoutDelay=1000 -XX:StartFlightRecording=disk=true,maxsize=4096m,maxage=3d -XX:FlightRecorderOptions=maxchunksize=128m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/jdk.internal.access=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
[toc]
优点:
[toc]
可修饰在方法, 类, 变量上; 解决多个线程访问资源的同步性问题, 保证被修饰的方法或者代码块在任意时刻只有一个线程执行.
加锁使用的monitorenter
获取锁, 通过monitorexit
释放锁, 早期jdk中, synchronized为重量级锁:
监视器锁(monitor)依赖与操作系统的MUTEX_LOCK
来实现,java线程映射到操作系统原生线程上, 如果挂起/唤醒一个线程,需要操作系统帮助. 而操作系统实现线程直接的切换需要从用户态切换到内核态, 这个状态切换需要事件较长, 成本较高.
jdk1.6后. 对synchronized进行了优化, 对锁的实现也引入了大量优化来减少锁的操作开销
[toc]
目的: 识别并丢弃未不再使用的对象来释放和重用资源
在内存中存在没有引用的对象或者超出作用域的对象时进行的.
当对象未null, 下个垃圾回调周期中, 此对象可能会被回收(非立即回收, 需下一次垃圾回收才释放占用内存)
JVM有一个低优先级的垃圾回收线程, 正常下不会执行,只有当虚拟机空闲或者当前堆空间不足时,才会触发执行扫描没有被任何引用的对象, 添加到要回收的集合中,进行回收