![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
一颗向上的草莓
后台开发者,前端爱好者,个人博客:http://catchu.github.io
展开
-
记一次有惊无险的 JVM 优化经历
背景生产环境有二台阿里云服务器,均为同一时期购买的,CPU、内存、硬盘等配置相同。具体配置如下: 节点 CPU 内存 硬盘 其它 A 2CPU 4G 普通云盘 Centos6.4 64位+JDK1.8.0_121...转载 2020-07-28 20:58:19 · 229 阅读 · 0 评论 -
深入理解CMS GC
深入理解CMS GC背景 网上关于cms gc介绍和调优的文章比较多,但大多没有经过验证。因为cms目前在Java9之前还是相对用的较多(G1也需要持续去调研),所以这里把CMS的一些重要知识和调优经验总结一下 相关jvm源代码版本为/openjdk-8-src-b132-03_mar_2014/openjdk/hotspot/src/share/vm 除了OpenJDK的源代码和R大以外,什么都不要轻易相信 CMS的一些重要知识点 使用cms gc必备的三个参数转载 2020-06-28 18:03:50 · 723 阅读 · 1 评论 -
JVM调优
1.Java内存分析工具MAT(Memory Analyzer Tool)安装使用实例2.jmap 命令3.JVM系列 实用命令(jmap、jstat、jstack)4.jvm 性能调优工具之 jstat原创 2020-06-27 21:34:18 · 132 阅读 · 0 评论 -
一次线程池未关闭导致的内存泄露问题
背景,运营反馈接口查询越用越卡。排查方案,跳板机登录到服务器,top命令查看,内存占用过高,使用jmap分析:jmap -histo:live 858524Thread类型的对象占用的内存最多。使用jstack命令分析:jstack -l 858524可以看到线程池中有很多线程处于WAITING状态,遗憾的是没有对线程池进行命名,不确定是在哪创建的线程池。在MAT中分析(对本次没实际意义,只单纯使用)使用jmap -dump:format=b,file=f2原创 2020-06-26 22:19:34 · 2277 阅读 · 0 评论 -
JVM内存垃圾回收方法
概要:why:为什么回收what:垃圾回收哪些内存(不可达对象的确定)when:何时执行GC(安全点、安全区域)how:如何回收(原理——垃圾回收算法、实现——垃圾收集器)1、垃圾回收哪些内存JVM运行时数据区中,线程私有的程序计数器、虚拟机栈、本地方法栈随线程的创建和退出而自动产生和销毁,不需要垃圾回收。JVM垃圾回收的是共享区域的内存,主要是方法区和Java堆内存的回...原创 2019-09-20 20:59:54 · 216 阅读 · 0 评论 -
JVM内存分配
总的来说,JVM管理的内存包括堆内存和非堆内存。堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。因此这里所说的内存分配是指堆内存的分配,即我们程序中生成的对象的分配。以下所述针对的是HotSpot虚拟机。...原创 2019-09-20 20:57:56 · 156 阅读 · 0 评论 -
Java对象创建的过程及对象的内存布局与访问定位
这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等。1、对象创建的过程 1、类加载、解析、初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载、解析、初始化,若没有则先进行类加载。 2、对象内存分配:类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定。...原创 2019-09-20 20:53:21 · 99 阅读 · 0 评论 -
Java虚拟机及运行时数据区
1、JVM定义Java虚拟机(Java Virtual Machine),简称JVM。当我们说起Java虚拟机时,可能指的是如下三种不同的东西:抽象的虚拟机规范 规范的具体实现 一个运行中的虚拟机实例Java虚拟机抽象规范仅仅是一个概念,在《The Java Virtual Machine Specification》中有详细的描述。该规范的实现,可能来自多个提供商,并存在于多个...原创 2019-09-20 20:52:04 · 91 阅读 · 0 评论 -
JVM内存模型
概要:Java引入内存模型是为了在各种硬件和OS下达到一致的内存访问效果,但它的引入也带来了并发下的一致性问题(因为主内存共享)。因此主要内容:一是内存模型的划分,二是解决并发(多线程)环境下操作的一致性问题,包括原子性、可见性、有序性。1、Java内存模型内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。Java虚拟机规范定义了Java内存模型(Ja...原创 2019-09-20 20:47:39 · 260 阅读 · 0 评论 -
JDK工具(查看JVM参数、内存使用情况及分析等)
在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄包装而已,他们的主要功能代码是在tools类库中实现的。命令行工具的好处是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程telnet到服务器上都会受...原创 2019-09-20 20:43:13 · 351 阅读 · 0 评论 -
深入理解JVM-内存模型(jmm)和GC
1 CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】有篇很棒的文章,从cpu讲到内存模型:什么是java内存模型在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存...转载 2019-09-18 21:01:03 · 219 阅读 · 0 评论