
jvm
文章平均质量分 93
华山拎壶冲
不积跬步,无以至千里。。。
面试必备:https://www.jianshu.com/u/c3be0f69940b
展开
-
Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许的范围,会抛出StackOverflowError的错误,不过这个深度范围不是一个恒定的值,我们通过下面这段程序可以测试一下转载 2021-04-22 11:45:00 · 224 阅读 · 0 评论 -
Tomcat类加载机制
https://www.cnblogs.com/aspirant/p/8991830.html原创 2019-12-27 16:49:40 · 121 阅读 · 0 评论 -
Java堆外内存排查小结
简介JVM堆外内存难排查但经常会出现问题,这可能是目前最全的JVM堆外内存排查思路。之前的文章排版太乱,现在整理重发一下,内容是一样的。通过本文,你应该了解: pmap 命令 gdb 命令 perf 命令 内存 RSS、VSZ的区别 java NMT 起因这几天遇到一个比较奇怪的问题,觉得有必要和大家分享一下。我们的一个服务,运行在...转载 2019-11-19 15:53:13 · 1007 阅读 · 0 评论 -
linux下查看某个进程的线程
线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念。当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道。这些功能让线程在并发执行时成为一个高效的机制。在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然...转载 2019-11-06 11:45:01 · 183 阅读 · 0 评论 -
vmstat命令详解
vmstat是VirtualMeomoryStatistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat工具提供了一种低开销的系统性能观察方式。因为vmstat本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat输出结...转载 2019-11-06 11:04:54 · 7210 阅读 · 0 评论 -
如何使用jstack分析线程状态
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按c...转载 2019-10-21 17:11:21 · 228 阅读 · 0 评论 -
jvm 性能调优工具之 jps
概述jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看...转载 2019-10-21 16:35:31 · 133 阅读 · 0 评论 -
jdk工具之jvisualvm使用
一、介绍VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的).从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。M...原创 2018-09-29 17:43:19 · 808 阅读 · 0 评论 -
关于GC的一些知识点梳理
日前查看某个程序的日志,发现一直在报GC相关的信息,不确定这样的信息是代表正确还是不正确,所以正好借此机会再复习下GC相关的内容:以其中一行为例来解读下日志信息:[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.00...转载 2019-08-15 11:42:32 · 733 阅读 · 0 评论 -
深入理解JVM—JVM内存模型
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子...转载 2019-07-12 11:16:54 · 162 阅读 · 0 评论 -
深入了解g1收集器(R大答网友问)
https://www.zhihu.com/question/62277180/answer/196715976从最高层看,G1的collector一侧其实就是两个大部分:* 全局并发标记(global concurrent marking)* 拷贝存活对象(evacuation)而这两部分可以相对独立的执行。Global concurrent marking基于SATB形式的并发标记...转载 2018-09-30 17:17:35 · 2343 阅读 · 1 评论 -
jdk工具之jhat命令(Java Heap Analyse Tool)概述
Jhat用于对JAVA heap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析,如LINUX上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题。不过jhat和MAT比较起来,就没有MAT那么直观了,MAT是以图形界面的方式展现结果一、hat命令 -- Java Heap Analyse Tool介绍用途:是用来分析Java堆的命令,可以将堆...转载 2018-09-29 10:10:02 · 4332 阅读 · 0 评论 -
jmap使用详解
1、命令基本概述Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo pid>a.log日志将其保存到文件中,在一段时间后,使用文本对比工具,可以对比出GC...转载 2018-09-28 17:35:22 · 5966 阅读 · 0 评论 -
JVM 垃圾回收器详解
本文主要讲述JVM中几种常见的垃圾回收算法和相关的垃圾回收器,以及常见的和GC相关的性能调优参数。GC Roots我们先来了解一下在Java中是如何判断一个对象的生死的,有些语言比如Python是采用引用计数来统计的,但是这种做法可能会遇见循环引用的问题,在Java以及C#等语言中是采用GC Roots来解决这个问题。如果一个对象和GC Roots之间没有链接,那么这个对象也可以被视作是一...原创 2018-09-07 16:38:40 · 304 阅读 · 0 评论 -
JVM GC日志分析
常用JVM参数http://blog.youkuaiyun.com/gzh0222/article/details/8223277分析gc日志后,经常需要调整jvm内存相关参数,常用参数如下-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制-Xmx:最大堆大...原创 2018-09-07 16:17:43 · 3454 阅读 · 0 评论 -
CMS垃圾收集器与G1收集器详解
1、CMS收集器 CMS收集器是一种以获取最短回收停顿时间为目标的收集器。基于“标记-清除”算法实现,它的运作过程如下:1)初始标记2)并发标记3)重新标记4)并发清除 初始标记、从新标记这两个步骤仍然需要“stop the world”,初始标记仅仅只是标记一下GC Roots能直接关联到的对象,熟读很快,并发标记阶段就是进行GC Roots Tracing,而重新标...转载 2018-09-11 19:49:41 · 1411 阅读 · 0 评论