04 2021 档案
摘要:衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”。 在内存占用、吞吐量和延迟这三项指标里,延迟的重要性日益凸显,越发备受关注。其原因是随着计算机硬件的发展、性能的提升,我们越来越能容忍收集器多
阅读全文
摘要:首先里面存了什么? 类型信息,常量,静态变量,即时编译后的代码缓存。 常量嘛,String.intern(),JDK6及之前可以,但是JDK7起就将字符串常量池,静态变量移入堆中了。 类型信息,即时代码缓存,基本一对一的东西。 在JDK7后,用户能动的也就它了。那只要能无限增加类型信息就行了呗。 问
阅读全文
摘要:这个关系不是一成不变的,由于维护和兼容性测试的成本,在JDK 8时将Serial+CMS、 ParNew+Serial Old这两个组合声明为废弃(JEP 173),并在JDK 9中完全取消了这些组合的支持(JEP 214)。 Serial/Serial Old收集器运行示意图 它只会使用一个处理器
阅读全文
摘要:分代收集理论 理论支撑: 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。 强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。 跨代引用假说(Intergenerational R
阅读全文
摘要:引用计数法 可达性分析算法 引用计数算法(Reference Counting)在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。虽然占用了一些额外的内存空间来进行计数,但它的原理简单,判定效率也很高,在大
阅读全文
摘要:Java对象分配 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 类加载检查通过后,接下来将为新生对象分配内存。对象所需内存的大小在类加载
阅读全文
摘要:存储局部变量表 局部变量存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、 int、float、long、double)、对象引用(reference类型 ,它并不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或者其
阅读全文
摘要:Java 虚拟机运行时数据区: 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 前三个都是每个线程独立的, 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作
阅读全文
摘要:算法简述逻辑做法最坏平均最好空间复杂度稳定性复杂性重点测试(100000)实际效率(以随机下冒泡为基准)优点缺点评价 冒泡 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。 它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如
阅读全文

浙公网安备 33010602011771号