201803-23 Java 堆内存溢出梗概分析 任何使用过基于Java的企业级后端应用的软件开发者都会遇到过这种低劣、奇怪的报错,这些报错来自于用户或是测试工程师: java.lang.OutOfMemoryError:Javaheapspace。为了弄清楚问题,我们必须返回到算法复杂性的计算机科学基础,尤其是“空间”复杂性。如果我们回忆,每一个应用都有一个最坏情况特征。具体来说,在存储维度方面,超过推荐的存储将会被分配到应用程序上,这是不可预测但尖锐的问题。这导致了堆内... 继续阅读 >
201801-29 面试必问的 volatile,你了解多少? 前言Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论,但似乎讨论不出一个完美的结果,带着种种疑惑,准备从JVM、C++、汇编的角度重新梳理一遍。volatile的两大特性:禁止重排序、内存可见性,这两个概念,不太清楚的同学可以看这篇文章->javavolatile关键字解惑概念是知道了,但还是很迷糊,它们到底是如何实现的?本文会涉及到一些汇编方面的内容,如果多看几遍... 继续阅读 >
201801-16 每日一博 | 记一次 JVM 堆外内存泄露 Bug 的查找 解Bug之路-记一次JVM堆外内存泄露Bug的查找前言JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔者将此Bug分析的过程写成博客,以飨读者。由于物理内存定量分析部分用到了linuxkernel虚拟内存管理的知识,读者如果有兴趣了解请看ulk3(《深入理解linux内核第三版》)内存泄露Bug现场一个线上稳... 继续阅读 >
201708-19 Android内存泄漏思考 Android内存泄漏是一个经常要遇到的问题,程序在内存泄漏的时候很容易导致OOM的发生。那么如何查找内存泄漏和避免内存泄漏就是需要知晓的一个问题,首先我们需要知道一些基础知识。Java的四种引用强引用:强引用是Java中最普通的引用,随意创建一个对象然后在其他的地方引用一下,就是强引用,强引用的对象Java宁愿OOM也不会回收他软引用:软引用是比强引用弱的引用,在Javagc的时候,如果软引用所引用的对象被回... 继续阅读 >
201708-16 进阶必备 - Java 反射由浅入深 本博文主要记录我学习Java反射(reflect)的一点心得,在了解反射之前,你应该先了解Java中的Class类,如果你不是很了解,可以先简单了解下。一、Java反射机制参考了许多博文,总结了以下个人观点,若有不妥还望指正:Java反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态的获取信息以及动态调用对象的方法... 继续阅读 >
201612-23 深入理解Java G1垃圾收集器 本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践。一,什么是垃圾回收首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象。垃圾回收的基本步骤回收的步骤有2步:查找内存中不再使用的对象释放这些对象占用的内存1,查找内存中不再使用的对象那么问题... 继续阅读 >
201611-24 系统剖析 Android 中的内存泄漏 作为Android开发人员,我们或多或少都听说过内存泄漏。那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结。关于内存泄露的定义,我可以理解成这样没有用的对象无法回收的现象就是内存泄露如果程序发生了内存泄露,则会带来如下的问题应用可用的内存减少,增加了堆内存的压力降低了应用的性能,比如会触犯更频繁的GC严重的时候可能会导致内存溢出错误,即OO... 继续阅读 >