随笔分类 - JVM
摘要:常见的垃圾收集器分为串行、吞吐量优先和响应时间优先三种。 串行:Serial 设置参数为 -XX:+UseSerialGC = Serial + SerialOld,Serial分为两种,Serial工作在新生代,使用复制算法;SerialOld工作在老年代,采用标记整理算法。 假设有4核CPU运行
阅读全文
摘要:JDK1.8中StringTable的底层类似于HashTable,由数组和链表实现,数组又称为桶数组。比如有这样一段代码: public class Demo4 { public static void main(String[] args) { int i = 0; System.out.pri
阅读全文
摘要:学习JVM的时候经常会遇到各种常量池,不同版本的JDK它们的存储位置也不同,这篇随笔就整理下几种常见的常量池,以JDK1.8为主。先看一张存储示意图,里面涉及1.8和1.6。 常量池是存储在方法区中的,比如我们有这样一段代码: public class Demo { public static vo
阅读全文
摘要:我们知道堆中存放的是对象,对象不被引用就会被垃圾收集回收掉。但是如果对象一直存在强引用,那么就会一直存活,当存活对象达到一定数量时,就会把堆内存占满,从而发生堆内存溢出错误。比如有这样一段代码:逻辑是每次都往集合中添加一个字符串对象,然后字符串进行一次拼接。 public class Demo1 {
阅读全文
摘要:当栈内存中栈帧过多或者栈帧过大,对于第一个原因,每调用一次方法就会在栈中分配一个栈帧。虽然栈帧用完内存就会自动回收,如果调用的方法之间执行的时间长,就有可能出现,最典型的场景就是方法递归调用。比如我们有个代码: 1 public class Demo { 2 // 记录方法调用次数 3 public
阅读全文
摘要:这篇文章我们关注一个问题:Java程序是怎么进入JVM并执行的?经常写Java程序的小伙伴应该都听说过类加载机制,在《深入理解Java虚拟机》里周老师已经讲的很清楚了,这篇随笔把之前的笔记以及一些总结重新梳理一下。前面我们已经知道 .java文件经过编译后变成Class文件,JVM加载的是字节码文件
阅读全文
摘要:这篇文章我们主要关注这些问题::Java程序执行完后,堆中的对象什么时候被回收?如何回收? 堆又叫做 “GC堆" 由于现在收集器基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代,比例是1:2;再细致一点新生代内部又划分为Eden区、Survivor区,比例为8:1。下图显示了堆的结
阅读全文
摘要:以前学JVM的时候看过《深入理解Java虚拟机》,当时看的很模糊也记了些笔记,更像是为了应付面试。事实是确实把笔记都背上了,春招找实习的时候,内存管理、类加载、垃圾回收三连背一遍。后来自己做项目的时候,涉及到JVM的部分还是不怎么理解,最近重读了上面的书并且看了一些技术大佬的专栏,用博客记录下自己学
阅读全文

浙公网安备 33010602011771号