
JVM
文章平均质量分 89
bohu83
微信:bohu83
展开
-
jstack出现Unable to open socket file: target process not responding or HotSpot VM not loaded
背景:怀疑线上有太机器有内存泄露的问题,症状:隔段时间会发现FullGC 越来越频繁,1分钟好几次。重启后会好几天。需要导出dump文件来分析。jmap -dump:format=b,file=heapDump可是报错了:1、Unable to open socket file: target process not responding or HotSpot VM not loaded我们之前的都是root 的。导致我产生一种印象,root可以有超级权限。但是这个case却..原创 2020-12-11 19:58:16 · 1811 阅读 · 0 评论 -
mac 安装mat
之前用elipse的时候,mat分析dump文件很方便,换了Mac 也换了idea之后,想使用mat,发现还是有点坑。一下载https://www.eclipse.org/downloads/download.php?file=/mat/1.10.0/rcp/MemoryAnalyzer-1.10.0.20200225-macosx.cocoa.x86_64.zip注意选择国内的下载镜...原创 2020-04-07 20:13:43 · 2526 阅读 · 6 评论 -
Garbage Collection Roots
一 背景 最近面试,被问到常见的GC Root 是什么?我有个感觉,关于JVM的问题,自己看过深入理解JVM 的书,也排查过线上的OOM的问题,用过MAT分析dump。总是觉得含含糊糊,不是那么有信心。面试也是我们一个学习的机会。补充下:二 整理:可达性:基本思想就是通过一系列的GC Root对象作为起点,从这些节点开始向下搜索,节点所走过的路称之为引用链,当一个对象没...原创 2019-10-27 00:08:53 · 263 阅读 · 0 评论 -
java梳理-深入理解类加载及初始化
概述 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。原创 2016-04-11 18:25:26 · 1367 阅读 · 0 评论 -
《并发编程的艺术》读书笔记-第2章java并发机制的底层实现原理
一概述本文属于《并发编程的艺术》读书笔记系列,之前整理了《深入理解java虚拟机》,在最后一部分高效并发觉得偏少,于是按照方腾飞的书来整理。二volatile的应用在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另原创 2016-06-14 23:17:40 · 1109 阅读 · 0 评论 -
<并发编程的艺术>读书笔记-第三章java内存模型的基础
一概述本文属于《java并发编程的艺术》读书笔记系列,本文整理第3章。原文较长,而且片理论,为了便于讲解这块,原书作者花了好多图来辅助说明。这里就主要调重点的整理,还是要结合原书去理解。二java内存模型的基础作者提出了并发编程的需要处理的两个关键问题:线程之间如何通信及线程之间如何同步,java采用的共享内存模型。2.1jmm的抽象结构:在java中,所有实例域、静态域和数组原创 2016-06-17 11:55:08 · 657 阅读 · 0 评论 -
《java并发编程的艺术》读书笔记-第三章Java内存模型(二)
一概述本文属于《java并发编程的艺术》读书笔记系列,第三章java内存模型第二部分。二final的内存语义final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。可以参照之前整理的关键字final。这里作者主要介绍final域的内存语义。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后原创 2016-06-18 18:22:22 · 2214 阅读 · 0 评论 -
<java并发编程的艺术>读书笔记-第三章java内存模型(一)
一概述本文属于《java并发编程的艺术》读书笔记系列,继续第三章java内存模型。二重排序2.1数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1原创 2016-06-17 17:25:37 · 2219 阅读 · 0 评论 -
[转载]转一篇介绍classload的文章(学习笔记)
原文地址:http://ifeve.com/classloader%E8%A7%A3%E6%83%91/感谢原作者:加多一、什么是Classloader一个Java程序要想运行起来,首先需要经过编译生成 .class文件,然后创建一个运行环境(jvm)来加载字节码文件到内存运行,而.class 文件是怎样被加载中jvm 中的就是Java Classloader所做的事情转载 2017-08-10 11:55:12 · 377 阅读 · 0 评论 -
Java程序性能条鱼读书笔记-第6章 Java性能调优工具
本章主要部分:1 Linux常用命令2. jdk自带堆信息工具3.mat内存分析工具************************************************************6.1 linux 常用命令1 top2sar3 vmstat4 iostat5 pidstat6.2 JDK 命令行工具1 jps命令2 js原创 2018-01-11 17:17:18 · 243 阅读 · 0 评论 -
jvm参数配置实例
看下jvm的配置work 22534 1 6 Jan05 ? 06:12:50 /opt/soft/java/bin/java -Xms2g -Xmx2g -Xmn1g -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=256m -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC原创 2018-01-09 19:57:03 · 720 阅读 · 0 评论 -
《Java程序性能优化读书笔记-第5章 JVM优化》
本章主题是JVM优化,所以把jvm的内存模型,JVM的参数(主要是堆分配),垃圾回收器的种类,JVM配置GC的参数。最后的例子可以参考。笔记只是粗略整理:5.1 JVM 内存模型主要是程序计数器,虚拟机栈,本地方法栈,堆,方法区http://blog.youkuaiyun.com/bohu83/article/details/511240625.2JVM内存分配参数http://b原创 2018-01-10 19:18:22 · 297 阅读 · 0 评论 -
记一次排查线上full gc过程
序最近频繁收到线上报警,就看看到底啥原因二 导出dump文件2.1 查找报警对应的进程ps -ef|grep XX是23898,看一下gc情况:这才不到半小时,fgc就增加了好几次。jmap导出dump。jmap -dump:format=b,file=salary1 23898因为文件相对较大,几百M。直接下载还是比较慢的,所以压缩后下载是快的。通常zip,tar压缩后是原来的1/10.再大的也...原创 2018-05-04 11:53:54 · 2532 阅读 · 0 评论 -
MAT分析线上OOM实例
一问题群里小伙伴说发生oom了。我没有那台机器权限,先保留现场,找人生成dump文件(jmap-dump:format=b,file=heapDump XXXX)是对应的进程id。然后重启。当然生成文件较大,2.4G 需要一段时间,会造成一次FullGC。非紧急时刻业务高峰期慎用。 当然更推荐一种在启动脚本就加上配置:-XX:+HeapDumpOnOutOfMemoryError 这...原创 2019-08-13 23:44:30 · 1269 阅读 · 0 评论 -
深入理解java虚拟机-目录
大概整理一遍,觉得有些乱,还是参照原书那样显得条理。本篇只是jvm目录索引。第一章 主要介绍java概述,干货不多看原文。第二部分 :自动内存管理机制 第二章:java内存区域与内存溢出异常 运行时数据区 虚拟机对象探秘 内存溢出异常分析 第三章 垃圾收集器与内存分配策略 垃圾回收算法 内存分配与回收策原创 2016-06-14 18:27:11 · 1680 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记-第10章早期(编译器)优化
一概述本文属于《深入理解java虚拟机》读书笔记系列,属于第四部分。这一块平时编码接触不多,更是从提高性能的角度去理解。作者分成两章来介绍。我自己是大概这样想的,整理完这两章,本书后面的高效并发系列单独来整理,我觉得可能限于篇幅,本书的侧重点不在并发这一段。java语言的“编译器”其实是一段“不确定”的操作系统,因为他可能是指一个前段编译期把*.java文件转化为*.class文件原创 2016-06-14 17:49:40 · 1024 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记-第八章虚拟机字节码执行引擎
一概述本文属于《深入理解java虚拟机》读书笔记系列,执行引擎是java虚拟机的核心组成部分之一。在java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,执行引擎在执行JAVA代码的时候可以选择解释执行(通过解释器执行)和编译执行(通过即使编译器产生本地代码执行)两种选择。 我们知道,javac编译器完成了程序代码经过词法分析、语法分析到抽象语法树、再遍历语法树生成线性的字节码指令流的过程。而...原创 2016-06-13 12:34:17 · 945 阅读 · 2 评论 -
java学习-【转】如何用Java编写一段代码引发内存泄露
原文地址:http://flychao88.iteye.com/blog/2113133原文如下:本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码。 Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码。这个问题我一点思路都没有,好囧。A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中)原创 2016-04-11 18:23:50 · 741 阅读 · 0 评论 -
java学习-【转】JVM JSTAT命令的用法和参数讲解
程老师原文地址:http://flychao88.iteye.com/blog/2192259原文如下:一、常用命令分析1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间。 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。2.jstat -gccapaci原创 2016-04-11 18:24:19 · 4069 阅读 · 0 评论 -
关于JVM的堆栈的思考
接上篇,梳理了jvm 的运行内存区。主要是对应了OOM的异常及GC有关。有些问题还是需要强化对比:1.堆、栈对比在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由java虚拟机的自动垃圾回收器来管理堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。原创 2016-04-11 18:24:29 · 412 阅读 · 0 评论 -
java学习-【转】32位jvm还是64位jvm?
原文地址:http://flychao88.iteye.com/blog/2145093在早期,JVM只有32位的,众所周知,32位有4G的内存限制。需要注意的是,32位jvm的堆内存实际可设的大小还受操作系统的限制。Hotspot VM,在Windows下,最大的堆内存大约在1.5G左右;在基于较新的linux kernel的Linux系统下,其限制在2.5到3G之间,在早前的linux ker原创 2016-04-11 18:23:55 · 909 阅读 · 0 评论 -
JVM参数整理
jvm参数较多,常用的就是之前学习笔记整理的关于OOM异常的调整。参数分类含义:标准参数:例如javap -verboseX参数:所有的这类参数都以-X开始,例如常用的-Xmx,XX参数:比较多的参数,类似于X参数对于布尔类型的参数,我们有”+”或”-“,然后才设置JVM选项的实际名称。例如,-XX:+用于激活选项,而-XX:-用于注销选项。对于需要非布尔值的参数,如string或者integer原创 2016-04-11 18:24:37 · 2752 阅读 · 0 评论 -
jvm垃圾回收算法梳理
背景 java建立了垃圾回收机制,但是JVM版本不同,使用的回收算法也不同。但是回收算法主要关注两点:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。 垃圾回收算法 1.引用计数法(Reference Counting Collector)1.1算法分析引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该原创 2016-04-11 18:24:40 · 1931 阅读 · 0 评论 -
java学习-【转】使用Eclipse MAT查找内存泄漏工具介绍
程老师原文地址:http://flychao88.iteye.com/blog/2192266原文如下:一、MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁原创 2016-04-11 18:24:22 · 15064 阅读 · 0 评论 -
深入理解java虚拟机读书笔记-3.6内存分配与回收策略
一、概述本文属于 《深入理解java虚拟机》读书笔记系列,第3章介绍了垃圾收集器与内存分配策略。其中垃圾收集器与收集算法,可以参照之前整理的文章,本文属于原书3.6部分章节。Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,从大方向上将,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分原创 2016-06-07 22:42:30 · 780 阅读 · 0 评论 -
学习JVM-运行时数据区
之前的关于OOM异常的学习笔记,强迫自己整理了异常及对应的参数。本片学习笔记梳理下相关背景知识。一背景: 作为java码农,对于常见的编码,编译,执行比较熟悉了。更加关注框架跟业务实现,但是回头想想,当我们执行java命令后究竟发生了什么,就是我们通过JVM与机器交互,Java通过使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java具备了一次编写,多处运行的特性。JVM主要由类加载器子系统原创 2016-04-11 18:24:27 · 1944 阅读 · 0 评论 -
java学习-【转】Java常见内存溢出异常分析
原文地址:http://flychao88.iteye.com/blog/2182953原文如下:Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。栈溢出(StackOverf原创 2016-04-11 18:24:06 · 1110 阅读 · 0 评论 -
jvm读书笔记-2.3内存对象的创建、布局和访问
一背景介绍本文属于深入理解java虚拟机读书笔记系列(周志明)。第二章java内存区域与内存溢出异常。主要分为三节介绍:运行时数据区域,参见之前的整理(运行时数据区)Hotspot虚拟机对象(本文),还有OutofmemoryError异常(参见java内存溢出分析)。下面是详细内容。二对象的创建虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引原创 2016-06-05 18:19:04 · 625 阅读 · 0 评论 -
<深入理解java虚拟机>读书笔记-类文件结构
一概述本文属于《深入理解java虚拟机》读书笔记,第六章类文件结构。本章主要包含两个部分的内容:class类文件结构与字节码指令简介。下面分别整理。二class类文件结构2.1 平台无关性Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件原创 2016-06-11 22:15:54 · 995 阅读 · 0 评论 -
java学习-jmap命令
上篇学习笔记用mat分析dump,就是用jmap命令生成的。所以借这个机会整理下jmap常用命令背景:java dump是Java虚拟机的运行时快照。将Java虚拟机运行时的状态和信息保存到文件。 线程Dump,包含所有线程的运行状态。纯文本格式。堆Dump,包含线程Dump,幵包含所有堆对象的状态。二进制格式。jmap 的用途是为了展示java进程的内存映射信息,或者堆内存详情。常用的参数如下:原创 2016-04-11 18:24:24 · 1163 阅读 · 0 评论