jvm,gc,oom,reference
。
不要停止思考-jcn
向往美好生活
展开
-
Spring Boot引起的“堆外内存泄漏”排查及经验总结
背景为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPre...转载 2020-02-18 18:45:24 · 901 阅读 · 0 评论 -
gc七种垃圾收集器及g1原理
七种垃圾收集器1、垃圾收集器概述垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟...转载 2020-02-18 18:36:44 · 2357 阅读 · 0 评论 -
关于gc roots的理解
gc roots是什么所谓“GC roots”,或者说tracing GC的“根集合”,就是一组必须活跃的引用。例如说,这些引用可能包括:所有Java线程当前活跃的栈帧里指向GC堆里的对象的引用;换句话说,当前所有正在被调用的方法的引用类型的参数/局...转载 2020-02-18 12:57:48 · 1791 阅读 · 0 评论 -
java.lang.OutOfMemoryError异常完全指南
我的职业生涯中见过数以千计的内存溢出异常均与下文中的8种情况相关。本文分析什么情况会导致这些异常出现,提供示例代码的同时为您提供解决指南。-- Nikita Salnikov-Tarnovski (Plumbr Co-Founder and VP of Engineering)本文内容来源于Plumbr,对原文内容有删减和补充这也许是目前最为完整的Java OOM...转载 2020-02-16 20:57:28 · 3966 阅读 · 0 评论 -
什么时候需要AtomicReference?
问:既然在java中引用的赋值操作本身就是是原子的,那为什么还需要AtomicReference(原子引用)?答:如果仅需要通过赋值操作改变一个引用,确实不需要AtomicReference。// 注意volatile关键字volatile Person person = new person("Jim");public void processA() { // 赋...转载 2020-02-16 15:03:31 · 7404 阅读 · 0 评论 -
jvm reference
JDK1.2之后,把对象的引用分为四种状态,即强引用、软引用、弱引用和虚引用。这样的方式,可以更加灵活地控制对象的生命周期。一、强引用开发中用的最多的就是强引用了。强引用声明格式:String str="abc";只要某个对象与强引用关联,那么JVM在内存不足的情况下,宁愿抛出outOfMemoryError错误,也不会回收此类对象。【1】如果我们想要JVM回收此类被强...转载 2020-02-16 14:54:32 · 876 阅读 · 0 评论 -
JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
如果想了解Java内存模型参考:jvm内存模型-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东)相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋。一、 技术背景你要了解吧 按照套路是要先装装X,谈谈JVM垃圾回收的前世今生的。说起垃...转载 2020-02-10 18:38:26 · 511 阅读 · 0 评论 -
Java jvm所有参数以及关于jvm调优
参数汇总一、java启动参数共分为三类:其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非St...转载 2020-02-18 13:30:24 · 3619 阅读 · 2 评论 -
Java JVM垃圾收集算法
垃圾收集算法:1.标记-清除算法:如同名字一样,操作分两个阶段标记与清除,标记过程在如何判断对象已死中已经有做介绍了。缺点:标记和清除过程效率不高,标记清除后会产生大量的空间碎片。过多的空间碎片会影响以后程序运行分配较大的对象时,无法找到连续内存而不得不提前触发另一次垃圾收集动作。2.复制算法:简单的理解就是:把一块内存空间分为两块,一块快用完了,就把另一块复制到新的内存空间上,然后把...原创 2019-03-20 20:35:51 · 150 阅读 · 0 评论 -
Java JVM如何判断对象已死
在我们要判断对象是否是生存还是死亡时,我们要先了解如下知识点:可达性分析算法(用于判断对象是否存活)算法的思想:以上图为模型作为理解,一系列GC Roots的对象作为初始点,按照节点向下搜索,搜索经过的路线成为引用链,当一个对象到GC Roots没有任何的引用链的话,则表明这个对象不可用,如图object4、object5、object6虽然互相关联,但是它们还是都会被当作回收对象...原创 2019-03-12 00:14:34 · 473 阅读 · 0 评论 -
解析 OutOfMemoryError 异常
OutOfMemoryError:内存溢出、内存泄漏 (Java虚拟机:HotSpot) 本文将从两个方面对OutOfMemoryError进行解析:1.通过demo验证Java虚拟机规范中描述的各个运行...原创 2019-03-10 23:34:54 · 254 阅读 · 0 评论 -
对象内存布局及访问定位
对象运行时数据(Mark Word)有:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。考虑到虚拟机的空间效率,Mark Word被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息,它会根据对象的状态复用自己的存储空间,且对象的存储有多种锁定状态,这里不做描述。类型指针是指向类的元数据在实例数据中:相同宽度的字段总是被...原创 2019-02-20 11:09:57 · 190 阅读 · 0 评论 -
简单Java对象的创建在JVM中发生了什么
创建对象很简单:new一个啊,但在Java的虚拟机中,引用“深入理解Java的虚拟机”中的这样一句话:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用表的类是否已被加载,解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。长长一句话很难记住它,我对此进行一下缩句:...原创 2019-02-19 19:42:42 · 1139 阅读 · 0 评论 -
初探JVM
学习并理解JVM,挺有趣的。下面是我刚开始学习自己画的JVM的初探理解图(仅对内存模型方面的初级窥探):程序计数器、线程私有内存:Java虚拟机栈的初探印象图:堆与方法区草图初探:...原创 2019-02-19 15:02:20 · 190 阅读 · 0 评论