end's coding life

赤子之心

一次CMS GC问题排查过程(理解原理+读懂GC日志)

这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下。这篇文章分三部分: 1、问题的场景和处理过程;2、GC的一些理论东西;3、看懂GC的日志 先说一下问题吧 问题场景:线上机器在半夜会推送一个700M左右的数据,这个时候有个数据置换的过程,也就是说有...

2016-05-16 12:04:36

阅读数:1522

评论数:0

JVM频繁Full GC的情况及应对策略

堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带...

2016-04-13 16:58:41

阅读数:4809

评论数:1

full gc频繁的分析及解决案例

现象 系统报警full gc次数过多,每2分钟达到了5~6次,这是不正常的现象 在full gc报警时的gc.log如下: 在full gc报警时的jstat如下: sudo -u admin -H /opt/taobao/java/bin/jstat -gcutil `pgrep j...

2016-04-13 16:44:39

阅读数:5337

评论数:1

深入理解Java虚拟机----(十一)线程安全与锁优化

线程安全     为了深入讨论,不把线程安全当做非真即假的概念,我们把它分为5个层次。 不可变:不可变的数据是线程安全的。例如前面提到的final,被final修饰的基础数据类型,被正确构造后,就是不可变的,亦为线程安全的。如果是一个对象,需要保证他的行为不会对状态产生印象,例如Str...

2016-02-12 17:05:08

阅读数:1086

评论数:0

深入理解Java虚拟机----(十)Java内存模型与线程

Java虚拟机规范试图定义一种Java内存模型来消除不同硬件和操作系统的差异。JDK1.5(JSR-133)开始,Java内存模型终于算是开始完善起来。Java内存模型主要是目的是定义程序中可线程共享的变量的访问规则。它规定所有变量都存在主内存,每个线程有自己的工作内存,存储的是使用的变量的主内存...

2016-02-12 12:40:35

阅读数:665

评论数:0

深入理解Java虚拟机----(九)程序编译和代码优化

早期优化     javac把.java文件编译为class文件的这个编译过程,几乎没做什么优化,几乎将优化都放到了后端的即时编译器中,这样是为了其他非javac编译的程序也能享受到优化的待遇。但javac给我们提供了很多便于编程的语法糖,大大的方便了我们。可以说后端优化提高了运行效率,前端优化...

2016-02-12 11:53:02

阅读数:1426

评论数:1

深入理解Java虚拟机----(八)类加载和执行子系统的应用

在上一篇class文件和执行引擎这部分中,用户能参与的部分不是太多。class格式、加载、链接、解释执行都是虚拟机规定的,能通过程序操作的有:类加载器和字节码生成。下面看看几个相关的精彩案例: Tomcat的加载器架构     java web服务器通常有多个自定义类,来解决这些问题 ...

2016-02-12 11:50:59

阅读数:1159

评论数:1

深入理解Java虚拟机----(七)字节码执行引擎

执行引擎是最重要的一部分,概念模型的总体外观是一致的:输入自己吗,过程是字节码解析的等效过程,输出结果。不同的虚拟机有不同的具体实现,大体有解释执行和编译执行两种选择。 运行时栈帧结构:     栈桢在虚拟机栈中,是支持方法调用和执行的结构。存储局部变量表、操作数栈、动态链接和方法返回地址等。...

2016-02-12 11:49:39

阅读数:1648

评论数:1

深入理解Java虚拟机----(六)类加载机制

上一篇简单描述的类文件结构只是一种被编译器编译后的一个通用描述。在运行时,虚拟机需要将类文件加载到内存,校验、解析、初始化等一些列操作后,生成可使用的Java类。这一系列过程就是虚拟机的类加载机制。     c++在运行前就有一个链接的过程,而java类型的加载、链接、初始化都是在运行期动态完成...

2016-02-12 11:47:02

阅读数:832

评论数:0

深入理解Java虚拟机----(五)类文件结构

虚拟机不与任何语言绑定,只与字节码这种二进制文件绑定。许多基于jvm的语言,都被编译成固定格式的字节码文件,具有了一致性,然后可以被统一的虚拟机执行。 Class文件结构:     class结构只有两种数据结构: 无符号数:基本数据结构,u1、u2、u4、u8代表1、2、4、8个字...

2016-02-12 11:46:12

阅读数:696

评论数:0

深入理解Java虚拟机----(四)性能监控与故障处理工具

前面的理论知识是解决问题的基础,经验是催化剂,数据是原料,工具是手段。其中数据包括线程快照、运行日志、GC日志、堆快照、异常堆栈等。下面介绍一下工具。     命令行工具     bin目录中,JDk为我们提供了强大稳定的工具集合,他们都是lib/tool.jar类库的包装。主要有 ...

2016-02-09 22:09:45

阅读数:1127

评论数:1

深入理解Java虚拟机----(三)内存分配策略和垃圾收集器

垃圾回收:     垃圾回收面临着三个问题:回收什么、什么时候回收、怎么回收。     哪些对象已经不再被需要了,就需要被回收。 引用计数法:教科书式解释,每个对象维护对它的引用的个数。但是主流虚拟机不适用,因为难解决循环引用。可达性分析算法:主流适用的算法。虚拟机选定一些GCRoo...

2016-02-09 18:45:03

阅读数:1233

评论数:0

深入理解Java虚拟机----(二)内存区域与内存溢出异常

内存区域:     与c++的由人为的内存管理相比,Java将内存交给了虚拟机来管理。     根据虚拟机规范,内存分为几个区域:      堆:线程共享区域。规范定义存放真正的对象和数组的内存区域。虚拟机大多采用分代收集算法,可以分为新生代老年代。新生代可分为Eden、From Surviv...

2016-02-08 22:08:36

阅读数:1000

评论数:0

深入理解Java虚拟机----(一)走近java

Java技术体系包括: Java程序设计语言Java虚拟机Class文件格式Java API类库第三方库     按照领域划分: Java Card:支持小内存设备的程序J2ME : 移动终端的平台J2SE : 桌面及应用平台J2EE:多级架构的企业级平台      ...

2016-02-08 22:06:37

阅读数:652

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭