07 2022 档案
摘要:垃圾回收相关算法 1.垃圾标记阶段的算法 引用计数算法 垃圾标记阶段:对象是否存活的判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为死亡的对象,GC才会执行垃圾回收,释放掉其所占用的内存空间,因此这个过程我们
阅读全文
摘要:垃圾回收概述 什么是垃圾 在提到什么是垃圾之前,我们先看下面一张图 从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集
阅读全文
摘要:StringTable String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "hello"; String s2 = new String("hello"); String:声明为final的,不可被继承 String 实现了Serializable接口
阅读全文
摘要:直接内存 直接内存概述 直接内存不是虚拟机运行时数据区的一部分。也不是《Java虚拟机规范》中定义的内存区域 直接内存是在Jaav堆外的、直接向系统申请的内存空间 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 通常访问直接内存的速度高于Java堆,也就是读写性能更
阅读全文
摘要:执行引擎 概述 执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器 执行引擎是Java虚拟机核心组件之一 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行的能力,其区别就是物理机的执行引擎是建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实
阅读全文
摘要:对象的实例化内存布局与访问定位 面试题 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头有什么? 从对象创建的方式 和 步骤开始说 对象创建方式 new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法 Class的newInsta
阅读全文
摘要:方法区 这次所讲述的是运行时数据区的最后一个部分 栈、堆、方法区之间的交互关系 从线程是否共享来看 从创建对象的角度来看 Person:存放在元空间,也可以说方法区 person:存放在Java栈的局部变量表中,引用类型指向堆空间的对象实例 new Person():存放在Java堆中 方法区的理解
阅读全文
摘要:堆 概述 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个java程序对应一个进程 每个进程拥有一个JVM实例 一个JVM实例,只有一个运行时数据区,一个运行时数据区只存在一个堆内存,堆也是Java内存管理的核心区域 Java堆区在
阅读全文
摘要:本地方法栈 Java虚拟机用于管理Java方法的调用,而本地方法栈用户管理本地方法的调用 本地方法栈,也是线程私有的 允许被实现固定或者是可拓展的内存大小(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈的最大容量,Java虚拟机竟会抛出一个 StackOverflowError异常
阅读全文
摘要:导入表的问题 导入数据时外键约束问题 数据导入指令: source d:\xxx.sql 通过FOREIGN_KEY_CHECKS解决,用法如下: set FOREIGN_KEY_CHECKS=0; #在导入前设置为不检查外键约束 set FOREIGN_KEY_CHECKS=1; #在导入后恢复检
阅读全文
摘要:本地方法接口 什么是本地方法 简单的来讲,一个Native Method就是一个Java调用非Java代码的接口,一个Native Method是这样的一个Java方法:该方法的实现由非Java语言实现。比如C。这个特征并发Java所持有,其他编程语言也有,如C++,可以使用extern "c" 告
阅读全文
摘要:虚拟机栈 概述 虚拟机栈出现的背景 由于跨平台的设计,Java指令都是根据栈来设计的。不同平台的CPU架构不同,所以不能设计为基于寄存器的 优点是跨平台,指令集少,编译器容易实现,确定是性能下降,实现同样的功能需要更多的指令 内存中的栈和堆 栈是运行时的单位,而堆是存储的单位 即:栈是解决程序的运行
阅读全文
摘要:程序计数器 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的线程信息。CPU只有把数据装载到寄存器才能够运行 这里,并非广义上的所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加的贴切(也称为
阅读全文
摘要:运行时数据区概述及线程 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 就是大厨做饭,我们把大厨后面的东西(切好
阅读全文
摘要:类加载子系统 概述 JVM 内存的结构 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开始由特定的文件标识 ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称
阅读全文