
jvm系列
大神,快来碗里
专注于Java相关技术
展开
-
总结-推荐收藏系列:一文理解JVM虚拟机(内存、垃圾回收、性能优化)解决面试中遇到问题(图解版)
《能力提升,加薪可待-JVM篇》-JVM虚拟机(内存、垃圾回收、性能优化) 一. JVM内存区域的划分 1.1 java虚拟机运行时数据区 java虚拟机运行时数据区分布图: JVM栈(Java Virtual Machine Stacks): Java中一个线程就会相应有一个线程栈与之对应,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈,因此栈存储的信息都是跟当前线程(或程序)相关...原创 2019-12-06 14:35:40 · 11260 阅读 · 0 评论 -
jvm总结
学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 一、简单聊聊JVM 1.1先来看看简单的Java程序 package cn.myframe.demo; public class D5 { public static void main(String[] args) { ...原创 2019-12-05 09:56:36 · 11067 阅读 · 0 评论 -
jvm系列(10):教你如何成为Java的OOM Killer
前言 虽然事隔半年,当时排查线上OOM事故的过程记忆犹新,每一个步骤都历历在目,感谢业务组、系统部、压测组、监控与应急部对架构组的强力支持,得以让这个Java内存问题水落石出,经过半年多的全面的应用日志 切割方式的改造,现在基本没有OOM的问题了,线上服务运行非常健康,对可用性的保障起到了很大的作用,如果你在经历OOM,读了这个文章会有很大的启发。 Become OOM Killer 我们都知道J...原创 2019-05-01 14:44:56 · 16536 阅读 · 0 评论 -
jvm系列(9):如何优化Java GC
GC优化是必要的吗? 或者更准确地说,GC优化对Java基础服务来说是必要的吗?答案是否定的,事实上GC优化对Java基础服务来说在有些场合是可以省去的,但前提是这些正在运行的Java系统,必须包含以下参数或行为: 内存大小已经通过**-Xms和-Xmx**参数指定过 运行在server模式下(使用**-server**参数) 系统中没有残留超时日志之类的错误日志 换句话说,如果你在运行时没有...原创 2019-05-01 14:44:14 · 16601 阅读 · 1 评论 -
jvm系列(8)jvm调优-命令篇
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命...原创 2019-05-01 14:43:07 · 17367 阅读 · 0 评论 -
jvm系列(7):jvm调优-工具篇
对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的部分运行状态,并将其存储在堆转储 (Heap Dump) 文件中,从而为我们分析和诊断问题提供了重要的依据。其中VisualVM和MAT是dump文件的分析利器。 jdk自带的工具 jco...原创 2019-05-01 14:41:21 · 16765 阅读 · 0 评论 -
jvm系列(6):Java服务GC参数调优案例
本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响。 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题。我个人特别喜欢这种实战类的内容,经原作者的授权同意,将文章分享于此。备注部分为本人添加,主要起到说明的作用。 原文出处:https://segmentfault.com/a/119000000517...原创 2019-05-01 14:39:35 · 16250 阅读 · 0 评论 -
jvm系列(5)Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演。 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对...原创 2019-05-01 14:37:23 · 16316 阅读 · 0 评论 -
jvm系列(4)Java 8-从持久代到metaspace
Java 8介绍了一些新语言以及运行时新特点。其中一个特点便是完全移除了持久代(PermGen),自从Oracle公司发布了JDK1.7后就已经宣布了这个决定。还有比如内部字符串,从JDK1.7开始就从持久代移除了,JDK8的发布彻底废除了它。在这个部分,我们会讨论持久代的继任者:Metaspace。 当执行一个Java程序并出现了“泄露”类元数据对象时我们会比较HotSpot 1.7和HotSp...原创 2019-05-01 14:35:06 · 16378 阅读 · 1 评论 -
jvm系列(3)7种JVM垃圾收集器特点,优劣势、及使用场景
1.新生代的收集器包括: Serial PraNew Parallel Scavenge 2.老年代的收集器包括: Serial Old Parallel Old CMS 3.回收整个Java堆(新生代和老年代) G1收集器 新生代垃圾收集器 1.Serial串行收集器-复制算法 Serial收集器是新生代单线程收集器,优点是简单高效,算是最基本、发展历史最悠久的收集器。它在进行垃圾收...原创 2019-05-01 14:34:17 · 16221 阅读 · 0 评论 -
jvm系列(2)4种垃圾回收算法、垃圾回收机制与总结
垃圾回收算法 1.标记清除 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。 在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。 适用场合: 存活对象较多的情况下比较高效 适用于老年代 缺点: 容易产生内存碎片,再来一个比较大的对象时(典型情况:该对象的大小大于空闲表中的每一块...原创 2019-05-01 14:33:15 · 16335 阅读 · 0 评论 -
jvm系列(1)运行时数据区
1 JVM 1.1 JVM运行时数据区域 JDK 1.7 及以往的 JDK 版本中,Java 类信息、常量池、静态变量都存储在 Perm(永久代)里。类的元数据和静态变量在类加载的时候分配到 Perm,当类被卸载的时候垃圾收集器从 Perm 处理掉类的元数据和静态变量。当然常量池的东西也会在 Perm 垃圾收集的时候进行处理。 JDK 1.8 的对 JVM 架构的改造将类元数据放到本地内存中(元...原创 2019-05-01 14:31:58 · 16215 阅读 · 0 评论