![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
走在小路
行走在路上
展开
-
线上FullGC问题排查
问题前段时间发现线上的一个dubbo服务Full GC比较频繁,大约每两天就会执行一次Full GC。Full GC的原因我们知道Full GC的触发条件大致情况有以下几种情况:程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行执行了jmap -histo:live pid命令 //这个会立即触发fullgc在执行minor gc的时候进行的一系列检查执行Minor GC的时候,JVM会检查老年代中最大连续可用空间是否大于了当前新生代所有对象的总大小。如果大转载 2020-06-11 21:07:16 · 1629 阅读 · 0 评论 -
fullGC过于频繁怎么办
fullgc过于频繁有可能会造成oom,有可能不会。首先明确一下,这篇文章的重点是分析后面一种情况,即应用在频繁的fullgc,但并没有出现oom。我们来想一下为什么会出现fullgc,触发原因有很多种,但归根到底都是因为内存空间不足了(system.gc的情况不考虑)。系统在频繁的fullgc,但并没有出现oom,说明每次回收的时候,肯定清理了部分内存空间。那这里就有2种情况,gc之后清理的内存空间大不大?1、如果每次gc之后剩余的空间不大,说明有一部分顽固对象一直没法被回收,导致可用内存转载 2020-06-11 20:56:08 · 2820 阅读 · 1 评论 -
JVM深度解析
Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java...转载 2020-04-09 22:24:47 · 188 阅读 · 0 评论 -
JVM垃圾回收-实战篇
上文我们学习了 GC 的理论基础,相信大家对 GC 的工作原理有了比较深刻的认识,这一篇我们继续趁热打铁,来学习下 GC 的实战内容,主要包括以下几点JVM 参数简介 发生 OOM 的主要几种场景及相应解决方案 OOM 问题排查的一些常用工具 GC 日志格式怎么看 jstat 与可视化 APM 工具构建 再谈 JVM 参数设置JVM 参数简介在开始实践之前我们有必要先简单了解一...转载 2020-03-31 09:25:12 · 366 阅读 · 0 评论 -
常用的jvm参数
前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下:[Full GC 178K...转载 2019-12-31 08:58:09 · 117 阅读 · 0 评论 -
CPU突然飙升,如何排查
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内...转载 2019-12-16 16:38:01 · 8306 阅读 · 3 评论 -
经常出错的一道题
publicclassAddTest{publicstaticvoidmain(String[]args){inti=0;i=i++;System.out.println("i="+i);}}输出结果是多少呢?自己思考后继续往下看效果更好哦=================分界线=...转载 2019-11-29 10:10:57 · 138 阅读 · 0 评论 -
java类加载机制浅析
概念类加载器把class文件中的二进制数据读入到内存中,存放在方法区,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。一、加载:查找并加载类的二进制数据(把class文件里面的信息加载到内存里面)二、连接:把内存中类的二进制数据合并到虚拟机的运行时环境中 验证:确保被加载的类的正确性,包括: 类文件的结构检查:检查是否满足Jav...转载 2019-11-24 10:11:21 · 92 阅读 · 0 评论 -
你写的 Java 代码是如何一步步输出结果的
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式。在本篇文章中,将重点研究java源代码的执行原理,即从程序员编写JAVA源代码,到最终形成产品,在整个过程中,都经历了什么?每一步又是怎么执行的?执行原理又是什么?一、编写java源程序java源文件:指存储java源码的文件。先来看看如下代码://MyTest被public修饰,...转载 2019-11-21 20:26:41 · 604 阅读 · 0 评论 -
图解java垃圾回收机制
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文...转载 2019-08-27 09:39:34 · 106 阅读 · 0 评论 -
JVM运行时数据区
本系列文章讲解 面试中常见的 JVM 问题。这些问题之所以常见,是因为很基础,对于一个有点逼格的程序员来说, JVM 的相关特性和原理在工作也需要熟知。笔者也在面试的过程中屡屡受挫,屡败屡战,总结一些常见知识点,这些知识点既可以应付面试,也可以帮助读者深入了解 JVM 提供大纲。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负...转载 2019-08-08 21:20:20 · 100 阅读 · 0 评论 -
JVM的一些问题
在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。那么,请大家尝试着回答一下以下问题:1、JVM管理的内存结构是怎样的?2、不同的虚拟机在实现运行时内存的时候有什么区别?3、运行时数据区中哪些区域是线程共享的?哪些是独享的?4、除了JVM运行时内存以外,还有什么区域可以用吗?5、堆和栈的区别是什么?6、J...转载 2019-08-08 17:27:41 · 92 阅读 · 0 评论 -
java类加载机制
01 字节码在聊 Java 类加载机制之前,需要先了解一下 Java 字节码,因为它和类加载机制息息相关。计算机只认识 0 和 1,所以任何语言编写的程序都需要编译成机器码才能被计算机理解,然后执行,Java 也不例外。Java 在诞生的时候喊出了一个非常牛逼的口号:“Write Once, Run Anywhere”,为了达成这个目的,Sun 公司发布了许多可以在不同平台(Windo...转载 2019-08-08 16:20:57 · 93 阅读 · 0 评论 -
JVM知识图谱
jvm性能调优性能优化如何理解 如何衡量性能标准 性能优化是什么 性能优化后效果 jvm内存管理机制 内存区域与内存溢出异常 运行时数据区域 程序计数器 虚拟机栈 本地方法栈 虚拟机对象 什么是jvm内存模型jmm 垃圾收集器与内存分配策略,各种垃圾收集器使用场景 垃圾回收算法与基础 串行收集器 并行收集...原创 2018-09-29 17:05:14 · 834 阅读 · 0 评论 -
[精]--这一次,让你彻底明白Java的值传递和引用传递!
本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。其实,对...转载 2018-10-31 10:49:05 · 1250 阅读 · 0 评论 -
[性能][JVM]jvm垃圾回收机制
一、垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构...转载 2019-02-21 15:44:22 · 193 阅读 · 0 评论 -
[java][锁]java锁的膨胀和优化
首先说一下锁的优化策略。1,自旋锁自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定的情况,只能说总体上是一种优化。举个例子就好比一个人要上厕所发现厕所里面有人,他可以:1,等...转载 2019-02-22 08:59:30 · 167 阅读 · 0 评论 -
[性能]【JVM】关于JVM内存的N个问题
阅读目录JVM的内存区域是怎么划分的? OOM可能发生在哪些区域上? 堆内存结构是怎么样的? 常用的性能监控与问题定位工具有哪些? 参考正文回到顶部JVM的内存区域是怎么划分的?JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是...转载 2019-03-10 10:31:35 · 197 阅读 · 0 评论 -
[JVM]JVM的一点总结
概述很多人想要到阿里巴巴、美团、京东等互联网大公司去面试,但是现在互联网大厂面试,一般都必定会考核JVM相关的知识和实践经验。毕竟线上系统写好代码部署之后,每个工程师都必须关注JVM相关的东西,比如OOM、GC等问题.所以一起来看看JVM的最基本的区域划分以及工作原理,这个基本上是互联网公司面试必问。区域划分jvm的区域划分如下所示:...转载 2019-04-23 09:29:33 · 106 阅读 · 0 评论 -
java内存区域
基本问题:介绍下Java内存区域(运行时数据区)。 Java对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式)拓展问题:String类和常量池 8种基本类型的包装类和常量池1 概述(为什么要学习Java内存区域)对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序...转载 2019-05-29 16:37:47 · 119 阅读 · 0 评论 -
[jvm]图解java垃圾回收机制
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文接下...转载 2019-06-15 14:32:57 · 274 阅读 · 0 评论 -
面试官对于JVM类加载机制的猛烈炮火,你能顶住吗
目录: 前文回顾 JVM在什么情况下会加载一个类? 从实用角度出发,来看看验证、准备和初始化的过程 核心阶段:初始化 类加载器和双亲委派机制 昨日思考题的解答 今日思考题 1、前文回顾咱们今天先来回顾一下昨天讲到的JVM整体的一个运行原理。我们首先从“.java”代码文件,编译成“.class”字节码文件,然后类加...转载 2019-07-05 14:49:37 · 218 阅读 · 0 评论 -
JVM内存划分
目录 1. 概述2. 运行时数据区域 2.1 程序计数器2.2 Java虚拟机栈2.3 本地方法栈2.4 Java堆2.5 方法区2.6 补充2.6.1 运行时常量池和Class文件常量池2.6.2 直接内存3. HotSpot虚拟机3.1 内存划分3.2 对象的创建、内存布局、访问定位3.2.1 对象的创建3.2.2 对象的内存布局...转载 2018-09-06 15:33:43 · 16730 阅读 · 3 评论