2020年12月9日
摘要: 本文简单说一说JVM应如何调优。 Java语言本身的成功,除了天时地利人和,JVM功不可没。 毫不夸张地说,JVM是现代软件工程最成功的案例之一。它规模庞大,代码极其复杂,但运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。 因为JVM自带GC,又有无数可以 阅读全文
posted @ 2020-12-09 17:25 adolfmc 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 1.将新对象预留在新生代 由于Full GC的成本远高于Minor GC,因此尽可能将对象分配在新生代是一项明智的做法。虽然在大部分情况下,JVM会尝试在eden区分配对象,但是由于空间紧张等问题,很可能不得不将部分年轻对象提前向老年代压缩。 在JVM参数调优中,可以为应用程序分配一个合理的新生代空 阅读全文
posted @ 2020-12-09 17:18 adolfmc 阅读(905) 评论(0) 推荐(0) 编辑
摘要: JVM调优是一个非常依赖实践的工作,本文就是在某些场景下对JVM调优方法的整理。 CPU占用高 CPU占用高是我们在线上会遇到的场景。出现这种情况,我们首先需要定位消耗CPU资源的代码。 我们以下面的代码为例,介绍怎么定位问题: 1234567891011121314 public class In 阅读全文
posted @ 2020-12-09 17:15 adolfmc 阅读(534) 评论(0) 推荐(0) 编辑
摘要: jvm优化必知系列——监控工具 这是jvm优化系列第二篇: jvm优化——垃圾回收 通过上一篇的jvm垃圾回收知识,我们了解了jvm对内存分配以及垃圾回收是怎么来处理的。理论是指导实践的工具,有了理论指导,定位问题的时候,知识和经验是关键基础,数据可以为我们提供依据。 在常见的线上问题时候,我们多数 阅读全文
posted @ 2020-12-09 17:10 adolfmc 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1 案例资料 案例程序在stock.zip中http://download.csdn.net/detail/jingshuaizh/9234175 Requirements jdk1.7 mysql 5.1 import db.sql 修改stock.bat 关于数据库的连接配置 2 调优目标 目标 阅读全文
posted @ 2020-12-09 17:07 adolfmc 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 背景 生产环境有二台阿里云服务器,均为同一时期购买的,CPU、内存、硬盘等配置相同。具体配置如下: 节点 CPU 内存 硬盘 其它 A 2CPU 4G 普通云盘 Centos6.4 64位+JDK1.8.0_121 B 2CPU 4G 普通云盘 Centos6.4 64位+JDK1.8.0_121 阅读全文
posted @ 2020-12-09 17:04 adolfmc 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 上周公司有一个应用,一到晚上高峰期的时候RT(响应时间)就很长。后来上服务器看了下JVM的配置,发现运维在启动参数那里把-Xss给设成了10M。导致每个线程占用的内存过大,导致内存消耗过快,其它线程排队等待的情况。后来把-Xss改成1M之后,系统性能有明显的提高。 总结: 1.-Xss参数不可以设的 阅读全文
posted @ 2020-12-09 17:03 adolfmc 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 1.5.3多核并行 Lambda支持会极大改善目前Java语言不适合函数式编程的现状.函数式编程的一个重要优点就是天然适合并行运行. 2.2.1程序计数器(每条线程独立私有) 程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值 阅读全文
posted @ 2020-12-09 17:02 adolfmc 阅读(213) 评论(0) 推荐(1) 编辑
摘要: Java类加载过程 类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。 类加载器的任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java 阅读全文
posted @ 2020-12-09 16:55 adolfmc 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 虚拟机遇到一条new指令时,开始进行对象的创建: 1. 检查这个指令的参数是否能在常量池中定位到一个类的符号引用。 true:则继续下一步。 false:说明这个类还没有被定义,会抛出ClassNotFoundException. 2. 检查这个符号引用代表的类是否已被加载、解析、和初始化 fals 阅读全文
posted @ 2020-12-09 16:54 adolfmc 阅读(612) 评论(0) 推荐(0) 编辑
摘要: JVM调优总结 目录 数据类型堆与栈Java对象的大小引用类型按照基本回收策略分按分区对待的方式分按系统线程分如何区分垃圾如何处理碎片如何解决同时存在的对象创建和对象回收问题为什么要分代如何分代什么情况下触发垃圾回收分代垃圾回收流程示意选择合适的垃圾收集算法小结堆大小设置回收器选择辅助信息常见配置汇 阅读全文
posted @ 2020-12-09 16:53 adolfmc 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下 阅读全文
posted @ 2020-12-09 16:52 adolfmc 阅读(292) 评论(0) 推荐(0) 编辑