摘要: 垃圾回收器 一、GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 Java不同版本新特性 语法层面:Lambd 阅读全文
posted @ 2022-08-03 21:18 flypiggg 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收相关概念 一、System.gc()的理解 在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而system.gc() )调用附带一个免责声明,无法保证 阅读全文
posted @ 2022-08-01 21:47 flypiggg 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收相关算法 1.垃圾标记阶段的算法 引用计数算法 垃圾标记阶段:对象是否存活的判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为死亡的对象,GC才会执行垃圾回收,释放掉其所占用的内存空间,因此这个过程我们 阅读全文
posted @ 2022-07-31 17:40 flypiggg 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收概述 什么是垃圾 在提到什么是垃圾之前,我们先看下面一张图 从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集 阅读全文
posted @ 2022-07-31 14:58 flypiggg 阅读(113) 评论(0) 推荐(0) 编辑
摘要: StringTable String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "hello"; String s2 = new String("hello"); String:声明为final的,不可被继承 String 实现了Serializable接口 阅读全文
posted @ 2022-07-31 11:48 flypiggg 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 直接内存 直接内存概述 直接内存不是虚拟机运行时数据区的一部分。也不是《Java虚拟机规范》中定义的内存区域 直接内存是在Jaav堆外的、直接向系统申请的内存空间 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 通常访问直接内存的速度高于Java堆,也就是读写性能更 阅读全文
posted @ 2022-07-30 17:03 flypiggg 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 执行引擎 概述 执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器 执行引擎是Java虚拟机核心组件之一 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行的能力,其区别就是物理机的执行引擎是建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实 阅读全文
posted @ 2022-07-30 17:03 flypiggg 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 对象的实例化内存布局与访问定位 面试题 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头有什么? 从对象创建的方式 和 步骤开始说 对象创建方式 new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法 Class的newInsta 阅读全文
posted @ 2022-07-30 15:20 flypiggg 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 方法区 这次所讲述的是运行时数据区的最后一个部分 栈、堆、方法区之间的交互关系 从线程是否共享来看 从创建对象的角度来看 Person:存放在元空间,也可以说方法区 person:存放在Java栈的局部变量表中,引用类型指向堆空间的对象实例 new Person():存放在Java堆中 方法区的理解 阅读全文
posted @ 2022-07-30 11:57 flypiggg 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 堆 概述 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个java程序对应一个进程 每个进程拥有一个JVM实例 一个JVM实例,只有一个运行时数据区,一个运行时数据区只存在一个堆内存,堆也是Java内存管理的核心区域 Java堆区在 阅读全文
posted @ 2022-07-29 17:25 flypiggg 阅读(25) 评论(0) 推荐(0) 编辑