
jvm
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
面试官问:上亿数据量下,Kafka是如何优化JVM GC问题的?
大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发的呢?今天我们从kafka架构以如何优化GC两个方面讲解kafka架构既然要说kafka是如何通过内存缓冲池设计来优化JVM的GC问题,那么,如果不清楚kafka 的架构设计,又怎么更好的调优呢?起码的我们要知道基础的才能往更好的出发呀,对把先来看技术名词 Topic:用于划分Message的逻辑.转载 2020-08-22 11:16:39 · 562 阅读 · 0 评论 -
JVM 史上最最最完整知识总结!
作者:Huangy远来源:segmentfault.com/a/1190000014395186Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是.转载 2020-08-12 17:56:36 · 289 阅读 · 0 评论 -
骚操作 | 不重启 JVM,替换掉已经加载的类,偷天换日?
在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。”比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,终于得出转载 2020-08-03 09:09:24 · 305 阅读 · 0 评论 -
玩点深入的:Java 虚拟机内存结构及编码实战
了解JVM内存结构的目的在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C、C++开发那样手动释放对象的内存空间,不容易出现内存泄漏和内存溢出的问题。但是,正是由于把内存管理的权利交给了JVM,一旦出现内存泄漏和内存溢出方面的问题,如果不了解JVM是如何使用内存的,不了解JVM的内存结构是什么样子的,就很难找到问题的根源,就更难以解决问题。JVM内存结构简介在JVM所管理的内存中,大致分为以下几个运行时数据区域: 程序计数器:当前线程所执行的字节码的行号指示器。转载 2020-07-24 15:40:43 · 206 阅读 · 0 评论 -
JVM 运行时数据区详解,写得非常好!
作者:小小木的博客www.cnblogs.com/wyc1994666/p/11795781.html在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了1.运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等。2.垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据3.类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运.转载 2020-07-24 15:16:49 · 250 阅读 · 0 评论 -
为什么只需要一个eden而需要两个survivor?
在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里?如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多转载 2020-07-07 10:17:12 · 329 阅读 · 0 评论 -
问懵逼:请站在 JVM 角度谈谈 Java 的锁?
并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据及解决竞争问题,从而提高程序的执行效率 .存在的问题对于最开始 (JDK1.5之前), Jav.转载 2020-05-12 13:29:09 · 446 阅读 · 0 评论 -
G1回收器:我怎么知道你是什么时候的垃圾?
让你看看“浮动垃圾”上周《面试官:你说你熟悉jvm?那你讲一下并发的可达性分析》这篇文章主要聊了jvm的可达性分析算法。借助“三色标记”大法分析了垃圾回收线程扫描的过程中,用户线程同时执行修改引用关系的操作时,可能会出现的“对象消失”问题,以及其对应的两种解决方案增量更新和原始快照。在文章中我写道:对象关系图的变化会导致出现两种情况一是“浮动垃圾”,二是“对象消失”。大概率的情况下...转载 2020-04-29 10:14:58 · 419 阅读 · 0 评论 -
JVM 虚拟机图文详解!真香!秒懂!一点都不难!
前言: 了解Java中的对象、变量等存放的内存区域十分重要 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢 目录:1. 内存模型 & 分区 Java虚拟机在运行Java程序时,会管理着一块内存区域: 运行时数据区 在运行时数据区里,会根据用途进行划分: Java虚拟机栈(栈区) 本地方法...转载 2020-04-14 20:58:45 · 332 阅读 · 0 评论 -
JVM史上最最最完整深入解析,不看后悔一百次!
作者:Huangy远来源:segmentfault.com/a/1190000014395186工作之余,总结一下JVM相关知识。Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的...转载 2020-04-10 22:16:36 · 274 阅读 · 0 评论 -
Kafka如何通过精妙的架构设计优化JVM GC问题
“这篇文章,同样给大家聊一个硬核的技术知识,我们通过Kafka内核源码中的一些设计思想,来看你设计Kafka架构的技术大牛,是怎么优化JVM的GC问题的?1、Kafka的客户端缓冲机制首先,先得给大家明确一个事情,那就是在客户端发送消息给kafka服务器的时候,一定是有一个内存缓冲机制的。也就是说,消息会先写入一个内存缓冲中,然后直到多条消息组成了一个Batch,才会一次网络通信...转载 2020-03-21 16:47:46 · 322 阅读 · 0 评论 -
这份美团架构师讲解的JVM知识,让我疫情期间,成功拿下阿里offer
写在前面话不多说,直奔主题每一个Java 开发人员都知道字节码由JRE (Java运行时环境)执行。但许多人不知道JRE是Java虚拟机(JVM)的实现, 它负责分析字节码、解析并执行代码。作为一个开发人员了解JVM架构是非常重要的,因为它使我们能更高效的编写代码。在这篇文章中我们将更深入了解Java中的JVM架构以及JVM的各个组件。JVM是什么?虚拟机 是物理机器的一个软件实现...转载 2020-03-19 09:46:42 · 374 阅读 · 0 评论 -
7 种 JVM 垃圾收集器,看完我跪了。。
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正式提供了商用的G1...转载 2020-03-08 21:46:53 · 411 阅读 · 0 评论 -
图文并茂,万字详解,带你掌握 JVM 垃圾回收!
垃圾回收( Garbage Collection 以下简称 GC)诞生于1960年 MIT 的 Lisp 语言,有半个多世纪的历史。在Java 中,JVM 会对内存进行自动分配与回收,其中 GC 的主要作用就是清楚不再使用的对象,自动释放内存。GC 相关的研究者们主要是思考这3件事情。 哪些内存需要回收? 什么时候回收? 如何回收? 本文也大致按照这个思路,为...转载 2020-03-08 21:36:08 · 453 阅读 · 0 评论 -
图文并茂,傻瓜都能看懂的 JVM 内存布局
本 JVM 系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握 JVM 相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习 JVM 知识,还是需要去阅读专业的书籍和文档。本文主题内容: JVM 内存区域概览 堆区的空间分配是怎么样?堆溢出的演示 创建一个新对象内存是怎么分配的? 方法区 到 Metaspace 元空间 ...转载 2020-01-19 10:44:32 · 291 阅读 · 0 评论 -
JVM CPU Profiler技术原理及源码深度解析
本文介绍了JVM平台上CPU Profiler的实现原理,希望能帮助读者在使用类似工具的同时也能清楚其内部的技术实现。引言研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈。Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程序进行动态分析,如CPU、Memory、Thread、Classe...转载 2020-01-07 16:18:44 · 365 阅读 · 0 评论 -
JVM内存占用情况深入分析,分分钟解开你的疑惑
很多同学都问过这个问题,为什么我的Xmx设置4g,但是TOP命令查询RES却占用5G,6G,甚至10G。这个正常吗?也可以说正常,也可以说不正常,怎么判断?笔者今天就要为你解答这个问题,叫你如何分析JVM占用的内存都分配到了哪里,哪些地方合理,哪些地方异常。内存分布首先,列举一下一个JVM进程主要占用内存的一些地方:Young Old metaspace java threa...转载 2018-11-26 11:16:26 · 5659 阅读 · 0 评论 -
JVM发生频繁 CMS GC,罪魁祸首是这个参数!
了解 CMS GC 的同学,一定知道 -XX:CMSScavengeBeforeRemark 参数,它是用来开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试。大家都知道CMS GC 只会回收 OldGen 的对象,那为什么需要这个参数? 由于 YoungGen 存在引用 OldGen 对象的情况,因此 CMS-remark 阶段会将 YoungGen 作为 OldGe...转载 2019-04-08 15:39:04 · 6312 阅读 · 1 评论 -
JVM 发生 OOM 的 8 种原因、及解决办法
1. Java 堆空间发生频率:5颗星造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长 解决方...转载 2019-04-25 19:49:15 · 431 阅读 · 1 评论 -
经典面试题 | 讲一讲JVM的组成
来源:王磊的博客JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分,一般开发者关注的和面试官问的都是后者,但本文会详细讲解以上两个组成部分。一、JVM 整体组成JVM 整体组成可分为以下四个部分: 类加...转载 2019-05-06 01:00:22 · 153 阅读 · 0 评论 -
拯救 Out Of Memory,8个案例带你飞!
来自:唐尤华https://bloggceasy.files.wordpress.com/2015/05/outofmemoryerror2.pdf1. Java 堆空间发生频率:5颗星造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finali...转载 2019-05-21 19:45:49 · 446 阅读 · 0 评论 -
跟面试官聊到JVM,他99%会让你谈谈这个问题!
本文转载自微信公众号:王磊的博客但凡问到 JVM(Java 虚拟机)通常有 99% 的概率一定会问:在 JVM 中如何判断一个对象的生死状态?本文就来聊聊这个问题,判断对象的生死状态的算法有以下几个:1、引用计数器算法引用计算器判断对象是否存活的算法是这样的:给每一个对象设置一个引用计数器,每当有一个地方引用这个对象的时候,计数器就加1,与之相反,每当引用失效的时候就减1。...转载 2019-05-17 13:51:19 · 210 阅读 · 0 评论 -
这 17 个 JVM 参数,高级 Java 必须掌握!
作者:SimpleSmilecnblogs.com/Simple-Object/p/10272326.html前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍...转载 2019-05-22 23:22:58 · 193 阅读 · 0 评论 -
JVM 与 Linux 的内存关系详解
来源:美团技术团队在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用 了),如下图所示。由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存...转载 2019-06-06 13:37:47 · 540 阅读 · 0 评论 -
图解 Java 垃圾回收机制,写得非常好!
原文:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html译文:https://www.oschina.net/translate/java-gc翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对...转载 2019-06-06 13:44:34 · 977 阅读 · 0 评论 -
蚂蚁面试:字符串在JVM中如何存放?
字符串对象在JVM中可能有两个存放的位置:字符串常量池或堆内存。 使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中; 使用字符串构造方法创建的字符串对象,它的值存放在堆内存中; String提供了一个API,java.lang.String.intern(),这个API可以手动将一个字符串对象的值转移到字符串常量池中。在1.7之前,字符串常量池是在Perm...转载 2019-06-03 09:52:42 · 242 阅读 · 0 评论 -
JVM 最多支持多少个线程?
McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗?Eddie的回答:这取决于你使用的CPU,操作系统,其他进程正在做的事情,你使用的Java的版本,还有其他的因素。我曾经见过一台Windows服务器在宕机之前有超过6500个线程。当然,大多数线程什么事情也没有做。一旦一...转载 2019-06-20 15:19:49 · 1093 阅读 · 0 评论 -
两道JVM面试题,竟让我回忆起了中学时代!
中学授课模式考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模式,给大家做一些知识上的普及。理论上,JVM参数主要分为三类1.标配参数该类型参数在JDK各个版本之间稳定,很少有大的变化。比如查看版本号java-version2.X参数这些用的不多,看看就好。//解释执行-Xint//第一次使用就编译成本地代码-Xcomp//混...转载 2019-06-18 13:18:20 · 332 阅读 · 0 评论 -
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
来源:http://sina.lt/gqaM最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。由于题目中给出的OOM,java中OOM又分很多类型;比如:堆溢出(“java.lang.OutOfMemoryError: Java heap sp...转载 2019-06-26 11:21:30 · 298 阅读 · 0 评论 -
骚操作 | 不重启 JVM,替换掉已经加载的类,偷天换日?
在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,...转载 2019-07-02 10:11:13 · 1565 阅读 · 3 评论 -
听说又被 JVM 内存区域方面的面试题给虐了?看看这篇文章吧!
本文转载自微信公众号:JavaGuide基本问题介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式)拓展问题String类和常量池 8种基本类型的包装类和常量池一 概述对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C+...转载 2019-03-28 23:40:03 · 315 阅读 · 0 评论 -
一些长时间GC停顿问题的排查及解决办法
对于许多企业级应用,尤其是OLTP应用来说,长暂停很可能导致服务超时,而对这些运行在JVM上的应用来说,垃圾回收(GC)可能是长暂停最主要的原因。本文将描述一些可能碰到GC长暂停的不同场景,以及说明我们如何排查和解决这些GC停顿的问题。下面是一些应用在运行时,可能导致GC长暂停的不同场景。1. 碎片化这个绝对要排在第一位。因为,正是因为碎片化问题--CMS最致命的缺陷,导致这个统治...转载 2019-03-28 23:21:07 · 1348 阅读 · 0 评论 -
生产环境JVM内存溢出案例分析
如果我们所在公司的业务量比较大,在生产环境经常会出现JVM内存溢出的现象,那我们该如何快速响应,快速定位,快速恢复问题呢?本文将通过一个线上环境JVM内存溢出的案例向大家介绍一下处理思路与分析方法。案例:架构组接到某项目组反馈,Zabbix监控上显示JMX不可用,请求协助处理。分析思路: JMX不可用,往往是由于垃圾回收时间停顿时间过长、内存溢出等问题引起的。 线上故障...转载 2019-04-07 15:52:00 · 583 阅读 · 0 评论 -
假笨说-从一起GC血案谈到反射原理
概述公司之前有个大内存系统(70G以上)一直使用CMS GC,不过因为该系统对时间很敏感,偶尔会因为gclocker导致remark特别长(虽然加了-XX:+CMSScavReengeBeforeRemark参数,但是gclocker会导致remark前的YGC被delay),无法忍受这么长的暂停就只好迁移到了G1,经过一系列的调优之后算比较稳定了,这套参数便推到了全部机器上可是就在上周突...转载 2018-11-28 09:48:52 · 446 阅读 · 1 评论 -
YGC前后新生代变大?
问题描述我们都知道gc是为了释放内存,但是你是否碰到过ygc前后新生代反增不减的情况呢?gc日志效果类似下面的:2016-05-18T15:06:13.011+0800: [GC [ParNew (promotion failed): 636088K->690555K(707840K), 0.2958900 secs][CMS: 1019739K->1019733K(13...转载 2018-11-28 09:39:22 · 489 阅读 · 0 评论 -
不可逆的类初始化过程
类的加载过程说复杂很复杂,说简单也简单,说复杂是因为细节很多,比如说今天要说的这个,可能很多人都不了解;说简单,大致都知道类加载有这么几个阶段,loaded->linked->initialized,为了让大家能更轻松地知道我今天说的这个话题,我不详细说类加载的整个过程,改天有时间有精力了我将整个类加载的过程和大家好好说说(PS:我对类加载过程慢慢清晰起来得益于当初在支付宝做clo...转载 2018-11-28 09:41:00 · 206 阅读 · 0 评论 -
如何定位消耗CPU最多的线程
之前有朋友反馈说发的内容希望有个梯度,逐步加深,前面发了几篇关于jvm源码分析的文章,可能我觉得我已经把内容写得浅显易懂了,但是对于某些没怎么接触的同学来说还是比较难理解,这个我以后慢慢改进吧,今天发篇轻松点的文章,可能大家在工作过程中也会可能碰到类似的问题,或许有经验的同学看到这个题目就知道我要说什么了,也有自己的定位方法。话不多说了,先来看代码吧public class Test...转载 2018-11-28 09:38:56 · 367 阅读 · 0 评论 -
假笨说-我是如何走上JVM这条贼船的
这两年陆陆续续写了20来篇和JVM相关的文章,虽然不是很多,但是也得到了一些人的认可,贴上了JVM的标签,还是挺欣慰的,2016年算是和JVM深绑的一年,现在2016年一不留神也快过了,也赶个时髦,来个小结,不过不铺开讲其他的事,就小结下我是如何走上JVM这条路的Flex的不解之缘不扯远啦,从本科开始说起,大学期间虽然Java和C也有课程教过,但是基本用得不是很多,也不是很熟,何况对于...转载 2018-11-27 12:07:36 · 402 阅读 · 0 评论 -
假笨说-协助美团kafka团队定位到的一个JVM Crash问题
概述有挺长一段时间没写技术文章了,正好这两天美团kafka团队有位小伙伴加了我微信,然后咨询了一个JVM crash的问题,大家对crash的问题都比较无奈,因为没有现场,信息量不多,碰到这类问题我们应该怎么去分析,我想趁这次机会和大家分享一下我针对这种问题的分析过程。不过我觉得这个分析过程可能会有点绕,因为crash文件太大,不能让大家看到crash文件的全貌而对让大家理解起来没那么有体...转载 2018-11-27 11:36:38 · 445 阅读 · 0 评论 -
Java常量池的大概理解
触摸java常量池 java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。 理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 虚拟机栈是jvm执行...转载 2018-11-25 10:55:44 · 219 阅读 · 0 评论