Java JVM系列
文章平均质量分 85
JVM系列
xiangxiongfly915
Android & Flutter & H5
https://github.com/xiangxiongfly
展开
-
JVM 优化技术
JVM常见的优化技术:方法内联优化。栈帧之间数据共享。原创 2023-09-19 10:16:34 · 405 阅读 · 0 评论 -
Java 直接内存 元空间
Java虚拟机在执行的时候会把管理的内存分配到不同的区域,这些区域称为虚拟机内存;同时对于虚拟机没有直接管理的物理内存,也会有一定的利用,这些被利用但不在虚拟机内存的地方称为本地内存。元空间不在虚拟机中,而是使用本地内存,JVM不会再出现方法区的内存溢出问题。...原创 2022-08-01 13:08:06 · 4617 阅读 · 1 评论 -
Java 字符串常量池
文章目录字符串常量池问题String类的不可变性字符串地址问题String#intern() 池化间接证明字符串常量池的位置new String("hello") 会创建几个对象?new String("abc") + new String("ABC")会创建几个对象字符串常量池问题String类的不可变性String类设计为不可变,final修饰String类,表示String类不能被继承;final修饰value数组字段,被赋值后不可改变,同时value字段是私有的,没有对外暴露。String不原创 2022-03-24 16:28:37 · 1424 阅读 · 5 评论 -
JVM 常量池划分
在Java中常量池可分为:静态常量池、运行时常量池、字符串常量池。原创 2022-03-23 17:47:09 · 912 阅读 · 0 评论 -
Java内存模型
文章目录Java内存模型硬件内存模型并发问题根源Java内存模型主内存 & 工作内存Java内存模型的八种操作内存间交互操作的规则volatile原理Java内存模型硬件内存模型并发问题根源指令重排序:为了提高CPU的运算效率,处理器可能会对输入的代码进行乱序执行,这就是所谓的指令重排序。可见性问题:CPU架构下存在高速缓存,每个核心下的L1/L2高速缓存不共享。原子性问题:Java的一条语句往往需要多条CPU指令完成,由于操作系统的线程切换很可能导致一条语句未执行完,其他线程中途操作原创 2022-03-16 16:21:45 · 489 阅读 · 0 评论 -
Java方法分派模型
文章目录Java方法分派模型变量的静态类型 & 动态类型静态分派类型强转问题静态分派优先级问题动态分派Java方法分派模型变量的静态类型 & 动态类型变量的静态类型:指引用类型,不会被改变,编译期可知。变量的动态类型:指实例对象类型,可以被改变,运行期可知。class Animal {}class Dog extends Animal {}class Cat extends Animal {}public class Demo { public sta原创 2022-03-15 16:57:56 · 772 阅读 · 0 评论 -
JVM 对象的内存分配和访问
文章目录Java对象的内存分配对象的创建流程类加载检查对象内存分配对象的内存布局对象头区域实例数据区域填充对齐区域对象的访问定位方式句柄访问直接指针访问Java对象的内存分配对象的创建流程虚拟机收到new指令触发。类加载检查:会判断类是否已经被加载,如果没有被加载则需要先执行类加载流程,对象所需内存大小在类加载完后可以完全确定。为对象分配内存,从堆中划分出一块确定大小的内存。内存分配完后,虚拟机需要将分配到的内存空间初始化为零(不包含对象头),保证了对象的实例字段在不赋初始值时也能直接使用。原创 2022-03-15 11:20:10 · 3009 阅读 · 0 评论 -
Java “+”拼接字符串原理
文章目录Java “+”拼接字符串原理概述案例分析一案例分析二案例分析三总结Java “+”拼接字符串原理概述在没有线程安全问题情况下,字符串拼接通常使用StringBuilder和+实现,那么这二者有什么区别?案例分析一public static void add1(String str) { String result = str + "aa" + "bb" + "cc";}public static void add2(String str) { String resu原创 2022-02-10 14:58:58 · 1127 阅读 · 0 评论 -
Java 强引用、软引用、弱引用、虚引用区别
在Java中,除了基础数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象。引用指某一个对象、某一块内存的开始地址,这与C/C++中指针的定义类似。Java将对象的引用划分为4个等级,分别是:强引用、软引用、弱引用和虚引用。根据不同引用类型可以灵活控制对象的生命周期,提高对象的回收效率。...原创 2020-11-08 23:37:12 · 218 阅读 · 0 评论 -
JVM 运行时数据区
线程私有的区域:程序计数器、虚拟机栈、本地方法栈。线程间共享区域:堆区、方法区。原创 2018-08-20 14:18:09 · 229 阅读 · 1 评论 -
JVM 垃圾回收机制
垃圾标记阶段(判断对象存活)引用计数法可达性分析法垃圾回收阶段标记-清除算法复制算法标记-整理算法分代收集算法垃圾收集行为Stop-the-World垃圾收集器类型原创 2022-03-08 17:02:49 · 991 阅读 · 0 评论 -
JVM 执行引擎
执行引擎是Java虚拟机核心的组成部分之一。JVM的主要任务是加载字节码,因为字节码不是机器码,所以Java字节码不能直接运行,因此需要执行引擎将字节码指令转为本地机器码指令。解释执行,将字节码指令逐条翻译为机器码并执行;编译执行,将字节码直接编译为本地机器码并执行。...原创 2022-03-07 15:52:47 · 653 阅读 · 0 评论 -
JVM 类加载机制
在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。虚拟机通过加载class文件获取描述类的数据,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 使用类型。Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用某个类时才会将它的class文件加载到内存并生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模型,即把请求交给父类加载器处理,他是一种任务委派模型。...原创 2022-03-04 17:12:48 · 686 阅读 · 0 评论 -
JVM 字节码文件结构
Java源代码通过 javac 命令编译生产 .class 字节码文件。使用javap命令查看字节码文件。如:javap -v Person.class 输出字节码信息,或 javap -v -p Person.class 输出完整字节码信息。可以安装 jclasslib 插件查看。原创 2022-03-03 17:59:51 · 1149 阅读 · 0 评论 -
JVM 基础
JDK & JRE & JVM的关系JVM 结构JVM 执行流程JVM 架构模型JVM 生命周期原创 2022-03-02 14:52:37 · 853 阅读 · 0 评论