jvm

一入JVM深似海

精细化JVM应用性能剖析工具

我们常说“精细化运营”、“精细化管理”,那什么是“精细化性能剖析”呢?在回答这个问题之前,我们先看看我们这个行业开发人员饱受的困扰:

不清楚应用的运行情况,包括但不限于GC情况、热点代码、热点线程、异常(特别是被吞没的异常);

不清楚应用代码执行情况,甚至不知道某个模块是否还可能会运行,尤其是对于有着一定历史的应用,可能已经有很多开发在上面贡献过代码,但随着业务发展这些功能可能已经不再被使用;

不清楚应用的IO情况,注意,这里说的绝对不仅仅是zabbix上的"磁盘IO",而是具体到某个文件、某个端口、某个线程的IO情况;

这些问题导致的直接后果就是:对于性能优化,无从下手,只能凭经验和直觉去猜测、埋点、优化,当然,最终结果一般就是“加机器扩容”。

了解了我们锁遇到的困扰或者面临的困境之后,我们结合精细化运营和精细化管理的概念来回答什么精细化性能剖析。精细化是基于规范化的基础上建立的一种理念,我们要把目标粒度细致化、精准化、具体化。精细化性能剖析,是基于某种规范详细的分析应用的性能,能够量化性能指标,明确出问题的瓶颈。

值得高兴的是JDK7以上已经内置了一款新型的性能剖析工具,也就是今天要重点介绍的-Java Flight Recorder,简称JFR,可以类比为飞机上的黑匣子。

阅读剩下更多

默认配图
一入JVM深似海

Mac之Catalina OS中编译OpenJDK8

如果想深入学习JDK内部的实现机制,最便捷的途径是自己手动编译一套JDK,通过静心阅读和调试跟踪JDK源码去深入了解Java技术体系的原理,结合各类书籍、文章和博客,对比理解,更容易让你了解JDK是怎么运作的,底层都做了什么。

本篇文章是作者在Mac OS X Catalina 10.15.1 环境下编译总结的,在其他的版本中可能不适用,但对于解决编译过程中遇到的错误或许也能提供一些帮助。

阅读剩下更多

默认配图
一入JVM深似海

类文件结构及类加载机制

我们都知道 JVM 并不能直接运行 Java 源文件,而是开发者通过 JDK 自带的工具命令 javac 将 Java 源文件编译成 class 字节码文件,也就是二进制文件,然后供JVM加载并使用。

尽管我们知道JVM 加载的是字节码,但我们对字节码有多少了解呢?本篇文章我们通过创建一个简单的User类对其编译一探字节码的究竟。此外,有些面试题中出现诸如String能存储多长的字符串,数组的最大维度是多少,一个方法最多能有多少个参数,一个类最多能定义多少个常量多少个变量多少个方法等等,我们也会在这边文章中会一一介绍。

阅读剩下更多

默认配图
返回顶部