前提概要 Java调式.热部署.JVM背后的支持者Java Agent: 各个 Java IDE 的调试功能,例如 eclipse.IntelliJ : 热部署功能,例如 JRebel.XRebel.spring-loaded: 各种线上诊断工具,例如 Btrace.Greys,还有阿里的 Arthas: 各种性能分析工具,例如 Visual VM.JConsole 等: Agent的介绍 Java Agent 直译过来叫做 Java 代理,还有另一种称呼叫做 Java 探针.首先说 Java…
基础参数系类(内存分配) -server:一定要作为第一个参数,在多个CPU时性能佳 -Xmn:young generation的heap大小,一般设置为Xmx的3.4分之一-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些-Xmx:Javaheap最大值,使用的最大内存 (上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半.)默认为1/64 和 1/4-XX:PermSize:设定内存的永久保存区域-XX:MaxPermSize:…
  类加载的生命周期:  加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载       加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 卸载 这6个阶段顺序是确定的,klass的加载过程一定会按照这个顺序执行.为了支持java的运行时绑定,解析阶段在某些情况下会在初始化之后才进行. 类的初始化阶段 对于加载这个阶段是跟具体的虚拟机实现有关,对于整个类加载阶段最重要的就是初始化这个阶段. JVM执行…
1.JVM-堆快照(Snapshot) 1.1 输出方式-获取hprof文件 启动参数配置OOM时触发打印堆快照 (1)tomcat启动方式添加参数 (添加环境变量) export JAVA_OPTS=  -XX:+HeapDumpOnOutOfMemoryError (表明进行统计相关heapDump文件再OOM的时候) -XX:HeapDumpPath=/export/Domains/rcsv-fm.wd.local/server1/logs/gc.hprof(表明会导出生产的HeapDum…
前提概要 Java的class字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令.这个过程是Java虚拟机做的,这个过程也叫编译.是更深层次的编译. 在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤: 根据完成任务不同,可以将编译器的组成部分划分为前端(Front End)与后端(Back End). 前端编译主要指与源语言有关但与目标机无关的部分,包括词法分析.语法分析.语义分析与中间代码生成. 后端编译主要指与目标机有关的部分,包括代码优化和目标代码生成等…
前提概要 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值.这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下: public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Fut…
前言 在目前众多编程语言中,Java 语言的表现还是抢眼,不论是企业级服务端开发,还是 Andorid 客户端开发,都是作为开发语言的首选,甚至在大数据开发领域,Java 语言也能占有一席之地,如Hadoop,Spark,Flink 大数据等.而作为已经诞生 24 年的 Java 相比其他语言来说,编写起来略显得冗长和复杂,而为了能极大提升 Java 开发的效率和代码简洁性,一个 Java 库 Lombok 就这样诞生了. 首先我们还是看下 Lombok 官方的描述: Project Lombo…
Guava包中限流实现分析 RateLimiter 之前的文章中已经介绍了常用的限流算法,而google在Java领域中使用Guava包中的限流工具进行服务限流. 回顾使用案例 Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法实现流量限制,使用十分方便. @Test public void testSample() { RateLimiter rateLimiter = RateLimiter.create(500) } 以上示例,创建一个RateLim…
延时队列前提 定时关闭空闲连接:服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之. 定时清除额外缓存:缓存中的对象,超过了空闲时间,需要从缓存中移出. 实现任务超时处理:在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求. 应用在session超时管理:网络应答通讯协议的请求超时处理. 痛点方案机制 一种比较暴力的办法就是,使用一个后台线程,遍历所有对象,挨个检查.这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间隔时间不好设置,间隔时间过大,影响精确度,多小则存…
我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是通过一个虚函数表来完成的,这也很好理解,那么java语言的多态性是怎么实现的呢?在java中是否也存在类似C++中的虚函数表的结构呢?这就需要我们从java虚拟机字节码执行引擎的执行过程来找答案了,下面就从java虚拟机字节码执行引擎的执行过程带领大家彻底理解java中的多态性. 通过前面的[jav…