包含标签 java 的文章

熟悉JVM内存区域

Java运行时数据区 如下内容如未说明均以JDK1.7版本为准 JVM内存主要分为5个部分: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 而JDK1.8和JDK1.7比,主要是将方法区(永久代) 被 元数据区取代,而且……

阅读全文

HotSpot垃圾算法实现之并发的可达性分析

并发的可达性分析 根可达算法在理论上,需要冻结全部的用户线程运行。在根节点枚举步骤中,由于GC Roots相比整个Java堆中全部对象毕竟是极少数,且在OopMap优化下,带来的停顿时间非常短暂且相等固定……

阅读全文

HotSpot垃圾算法实现之记忆集与卡表和写屏障

问题一:对象跨代(区域)引用,GC Roots扫描范围如何界定? 当部分区域进行垃圾收集时,如果非收集区域的对象跨区引用了收集区域的对象(收集区域的对象A可能被非收集区域的对象静态字段B引用,这样对象A应……

阅读全文

类加载器

定义 Java虚拟机通过一个类的全限定名来获取类的二进制字节流的这个动作,放到虚拟机外部实现,让应用程序自己决定如何获取所需的类。 实现这个动作的代码叫做类加载器。 类与类加载器 每个类加载器都有自己独立的类……

阅读全文

熟悉Java类文件class结构

Java基于Class文件作为存储格式,不同平台对应虚拟机实现的方式让Java具备跨平台的特性。 因此我们有必要更深入学习Class字节码文件的结构。 Class文件的结构 Class文件是一组以8个字节为……

阅读全文

熟悉JVM字节码指令

简介 Java虚拟机的指令由一个字节长度(256个操作码)的、代表着特定操作含义的数字(操作码,Opcode)和跟随其后的零至多个代表其操作需要的参数(操作数,Operand)构成。 由于Java虚拟机采……

阅读全文

MacOs10.15.7编译openjdk8u

Mac10.15.7上编译OpenJDK8u 机器环境及依赖 操作系统:macOs 10.15.7 BootJDK: /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home XCode:Version 11.3.1 (11C505) hg命令(mercurial): brew install mercurial freetype: brew install freetype 注意:笔者先前打算编译jdk8,一番折腾……

阅读全文

内存分配与回收策略

前提环境 笔者JDK版本如下,如果不做指定的话,64为虚拟机1.8版本默认使用的ParallelGC垃圾收集器。 $ java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) 使用-XX:+UseSerialG……

阅读全文

垃圾收集算法

分代收集理论 3个假说 弱分代假说:绝大多数对象都是朝生夕灭的。(设计了年轻代) 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。(设计了老年代) 跨代引用假说:跨代引用相对于同代引用仅占极少数。(实际……

阅读全文