技术编程|Java知识点梳理( 二 )
附:
GC Roots一般包括虚拟机栈中引用的对象 , 本地方法栈中引用的对象 , 方法区中类静态属性引用的对象、方法区中常量引用的对象 。
分代收集算法的基本思想是:不同的对象的生命周期(存活情况)是不一样的 , 而不同生命周期的对象位于堆中不同的区域 , 因此对堆内存不同区域采用不同的策略进行回收可以提高 JVM 的执行效率 。Minor GC 发生频率较高 , 不一定等 Eden区满了才触发;Major GC在老年代满时触发 , 对年轻代和老年代进行回收 。
(3)方法区回收
①对常量池的回收 。
②对类型的卸载:该类的所有实例被回收 , 该类的ClassLoader被回收 , 不存在对该类的Class对象的引用 。4.3 OOM/SOF
(1)OOM for Heap:内存泄露(GC Roots的引用链 , 对象的生命周期超出预期)或者内存溢出(调节JVM参数 -Xms , -Xmx 等)
(2)OOM for Stack:一般在单线程程序中不会出现;在多线程环境下 , 无法申请到足够的内存去创建线程
(3)SOF for Stack:程序是否有深度递归 。
(4)OOM for Perm :用到像Spring等框架的时候 , 常常会动态地生成大量的类导致永久代不够用而导致OutOfMemoryError: PermGen Space异常(调大 -XX:MaxPermSize)5、JVM 调优
JVM 调优的主要目标是使系统具有高吞吐、低停顿的特点 , 其优化手段应从两方面着手:Java虚拟机和Java应用程序 。前者指根据应用程序的设计通过虚拟机参数控制虚拟机逻辑内存分区的大小以使虚拟机的内存与程序对内存的需求相得益彰;后者指优化程序算法 , 降低GC负担 , 提高GC回收成功率 。以下是一些常用的JVM调优工具:
(1)Jconsole 与 Visual VM
JConsole 与 Visual VM 都是JDK自带的Java 性能分析器 , 可以从命令行或在 GUI shell 中运行 , 从而可以轻松使用 JConsole来监控 Java 应用程序性能和跟踪 Java 中的代码 , 其可以从JAVA_HOME/bin/这个目录下找到 。使用 Jconsole 监测死锁示例如下:
文章图片
文章图片
(1)Jstack
JDK自带的命令行工具 , 可以查看某个Java进程内的线程堆栈信息 , 主要用于线程Dump分析 。
文章图片
文章图片
(1)JPS
jps位于jdk的bin目录下 , 其作用是显示当前系统的java进程情况及其id 。
文章图片
文章图片
6、责任链(CoR)模式
目的:请求的发送者与请求的处理者解耦 , 便于动态的重新组织链和分配责任 。
角色:抽象处理者、具体处理者、客户端 。
UML:
文章图片
文章图片
传统责任链(CoR)模式的缺点在于:具体处理角色存在着共同的实现责任链结构的行为行为 , 即责任链的建立和指派包含在实现角色的类中 , 并没有抽象出来 , 这直接导致责任链的指派不够灵活 。因此 , 改进的CoR模式为:使用AOP理念将责任链结构的实现用切面抽象出来 , 使得各个对象只关注自身必须实现的功能性需求 , 准确地分离出责任链模式中不同角色的共同行为 , 例如 ,
推荐阅读
- 行业互联网|华为 | 车载以太网物理层及TSN发展现状 与技术趋势
- 技术编程|什么是Plesk虚拟主机控制面板?
- 电池技术|法国发明出世界最快的电极:可将锂电池的密度提高3倍
- 技术编程|人工智能在大视频运维中如何实现CDN硬盘故障预测?
- 电池技术|关于惠州赣锋建设高端聚合物锂电池研发及生产基地建设,赣锋锂业要干大事
- |加速冲刺世界级技术领先地位,大族机器人获1.65亿元A轮融资
- 解码器|苹果 ProRes 视频编解码器获 2020 技术工程艾美奖
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 中年|《经济学人》封面文章解析蚂蚁集团:数字技术的崛起代表了金融的未来
- 行业互联网|北科院轻工所技术入选中关村论坛技术交易大会“产业创新领先技术百强项目榜单”
