一.从一个例子开始 关于JVM的内存泄露,让我们从下面一个例子开始吧,大家来判断一下如果按照下面这种分配方式,会不会出现内存泄露呢? import java.util.List; import java.util.Vector; public class MemoryTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Vector vobj…
一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JVM两个子系统:类加载子系统和执行引擎子系统: 2.JVM两个组件:本地接口方法组件和内存空间组件. 2.JVM内存空间分为:Java堆,Java栈.方法区和本地方法区 关键词:我们经常讨论的JVM内存回收机制就是指Java堆内存回收机制. 四.JVM内存组成结构 上图所示四部分即为JVM内存组成结构…
本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste…
解Bug之路-记一次JVM堆外内存泄露Bug的查找 前言 JVM的堆外内存泄露的定位一直是个比较棘手的问题.此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头.笔者将此Bug分析的过程写成博客,以飨读者. 由于物理内存定量分析部分用到了linux kernel虚拟内存管理的知识,读者如果有兴趣了解请看ulk3(<深入理解linux内核第三版>) 内存泄露Bug现场 一个线上稳定运行了三年的系统,从物理机迁移到docker环境后,运行了一段…
1. 简述 Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系. Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台",是因为每个平台上不同的虚拟机屏蔽了硬件的差异,而 Java 程序则是运行在虚拟机之上的. 本文简要介绍 Java 技术体系及 Java 虚拟机(Java Virtual Machine, JVM)的相关发展历程,后文再进一步分析 Java 虚拟机的详细内容. PS: 本文及接下来的 JVM 笔记内容主要…
CPU过高 这类问题可以使用 top 命令观察一些,CPU 是不是都被 Java 程序占用了.比如下面这个截图: 服务器的 CPU 大多都被 Java 占用了.这正是我们之前生产上 CPU 过高的一个截图. 服务其CPU 还能超过 100%原因 在 Linux 上,多核 CPU 就会超过 100%.top 命令显示的是你的程序占用的 cpu 的总数,也就是说如果你是 4 核 cpu 那么 cpu 最高占用率可达 400%,top 里显示的是把所有使用率加起来. CPU 过高,这说明程序在进行计算…
1.静态集合类像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着. Static Vector v = new Vector(); for (int i = 1; i<100; i++) { Object o = new Object(); v.add(o); o = null; } 在这个例子中,代码栈中存在Vector 对象的引用 v 和 Object 对象的引用 o .在…
序列化和反序列化 序列化就是指把对象转换为字节码: 对象传递和保存时,保证对象的完整性和可传递性.把对象转换为有字节码,以便在网络上传输或保存在本地文件中: 反序列化就是指把字节码恢复为对象: 根据字节流中保存的对象状态及描述信息,通过反序列化重建对象: 一般情况下要求实现Serializable接口,该接口中没有定义任何成员,只是起到标记对象是否可以被序列化的作用. 对象在进行序列化和反序列化的时候,必须实现Serializable接口,但并不强制声明唯一的serialVersionUID,是…
可以先看看我的深入理解java虚拟机笔记 深入理解java虚拟机笔记Chapter2 深入理解java虚拟机笔记Chapter3-垃圾收集器 深入理解java虚拟机笔记Chapter3-内存分配策略 深入理解java虚拟机笔记Chapter4 深入理解java虚拟机笔记补充-JVM常见参数设置 深入理解java虚拟机笔记Chapter7 深入理解java虚拟机笔记Chapter8 深入理解java虚拟机笔记Chapter11 深入理解java虚拟机笔记Chapter12 JVM中的内存是怎么划分…
什么是内存泄露? 广义的Memory Leak:应用占用了内存,但是不再使用(包括不能使用)该部分内存 狭义的Memory Leak:应用分配了内存,但是不能再获取该部分内存的引用(对于Java,也不能被GC) 一个具体的例子: 应用创建了一个长时间运行的Thread 该Thread使用ClassLoader(可以是定制的也可以是默认的)加载了一个类 这个类有一个Static域,指向了一大块内存,然后该Thread的ThreadLocal变量保存了这个类的引用. 最后该Thread清理了对所有已…