随笔分类 - JVM
摘要:一次使用中间件引发的OOM调查 描述问题 在上一次上线完成后,线上的系统在运行几天后就会收到FullGC频繁的告警,而且每台服务都会告警,万能的重启可以解决问题,但不是根本办法,肯定是上一期的代码出现了内存泄漏,在预发环境上,由于操作次数较少,这个问题很难暴露。于是dump 线上的内存,用JProf
阅读全文
摘要:volatile 保证此变量对所有线程的可见性。 这个可见性是指,当一个线程读取volatile修饰的变量时,永远读取的都是最后一个线程写回主内存的最新值。某个线程在读取数据之后,另一个线程对变量值做了修改,这个线程是不知道的,这就导致当前线程读取的值是过期的,当前线程将过期的数据经过计算写回主内存
阅读全文
摘要:发现问题 当写下这行代码时,程序会注定运行失败。 错误信息:java.lang.OutOfMemoryError: Requested array size exceeds VM limit. 而且在jdk源码中总会看到类似这样的定义: 分析问题 看注释可以了解到,jvm会为数组头信息保留一些空间。
阅读全文
摘要:从上面的测试代码可以看出MappedByteBuffer存储long时, 从long的最高位字节开始存储的 ,这和我们的书写数字的很类似。所以在操作MappedByteBuffer时要注意这一点。
阅读全文
摘要:问题描述 现在很多java代码中都会用到内存映射的概念。文件映射的方式比输入输出流的方式快很多。但是在使用的过程中,正常地调用了FileChannel的force和close方法后,重命名文件或删除文件还会失败。主要原因还是文件的句柄没有释放。 问题分析及解决 文件句柄如果被持有,就相当于jvm虚拟
阅读全文
摘要:对象创建 在语言层面,创建一个对象通常仅一个new关键字就可以解决了,但是在虚拟机中,对象的创建要经过一个复杂的过程。 方法区中的常量池 当虚拟机遇到一个new关键字时,首先去方法区中的常量池中找有没有这个类的符号引用,并检查这个符号代表的类是否已经被加载、解析和初始化过,如果没有先执行类的加载过程
阅读全文
摘要:已经入行快有两年了,然而没有认真看过java虚拟机内存的介绍,下面把自己看的关于java虚拟机内存的介绍写下来,分享给大家。 java 虚拟机在运行时将内存分为几个区域,分别为程序记数区,java虚拟机栈,本地方法栈,java堆,方法区,运行常量池。此外还有一个叫做直接内存的区域,虽然不是java虚
阅读全文

浙公网安备 33010602011771号