JVM
文章平均质量分 52
同蝎女
这个作者很懒,什么都没留下…
展开
-
垃圾回收器
https://youthlql.gitee.io/post/4d401a8b.html原创 2021-08-31 18:33:35 · 62 阅读 · 0 评论 -
垃圾回收器
垃圾回收算法:垃圾标记阶段:主要是为了判断对象是否存活。 一般有两种方式:引用计数算法和可达性分析算法。原创 2021-08-05 12:43:15 · 68 阅读 · 0 评论 -
StringTable(字符串常量池)
注意点: ①String被final修饰,不可被继承,是不可变的字符序列 ②String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte[] ③字符串常量池是不会存储相同内容的字符串的 ④jdk7前在永久代的运行时常量池中,jdk7及之后在堆中字符串的拼接:1、常量与常量的拼接结果在常量池,原理是编译期优化“a” + “b” + “c” 优化成了 “a...原创 2021-08-04 20:41:30 · 203 阅读 · 0 评论 -
运行时数据区(方法区)
方法区主要存放的是 Class,而堆中主要存放的是实例化的对象元空间与永久代最大的区别在于:元空间不在虚拟机设置的内存中,而是使用本地内存。我们可以将方法区类比为Java中的接口,将永久代或元空间类比为Java中具体的实现类...原创 2021-08-04 17:54:19 · 101 阅读 · 0 评论 -
运行时数据区(堆)
注意点:1.所有的对象实例以及数组都应当在运行时分配在堆上。2.“几乎”所有的对象实例都在堆分配内存。还有一些对象是在栈上分配的(逃逸分析,标量替换)3.是GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域。 4.几乎所有的Java对象都是在Eden区被new出来的,绝大部分的Java对象的销毁都在新生代进行了 5.JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。...原创 2021-08-04 17:12:35 · 93 阅读 · 0 评论 -
运行时数据区(虚拟机栈)
虚拟机栈:它保存方法的局部变量(8 种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。栈是运行时的单位,而堆是存储的单位。每个线程对应着一个虚拟机栈,对应着一个个的栈帧,对应着一次次的Java方法调用 栈只有进栈和出栈两种操作,不需要GC,但是可能存在OOM(不存在垃圾回收问题)...原创 2021-08-03 15:41:44 · 69 阅读 · 0 评论 -
运行时数据区(PC寄存器、本地方法栈)
PC寄存器:存储指向下一条指令的地址。唯一一个在Java虚拟机规范中没有规定任何OutofMemoryError情况的区域。使用PC寄存器的作用: 1.恢复该线程上次中断执行的位置 2.明确下一条执行哪条指令PC寄存器被设定为私有的原因: CPU在不停地做任务切换,为了记录各个线程正在执行的字节码指令且之间不发生相互干扰。本地方法栈:Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。...原创 2021-08-03 13:28:42 · 94 阅读 · 0 评论 -
类加载子系统
一、概述加载阶段:在内存中生成一个代表这个类的java.lang.Class对象链接阶段:①验证:字节流信息符合虚拟机要求 ②准备:为(类变量)static变量分配内存并设零值。注意:这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中 ③解析:将常量池内的符号引用转换为直接引用的过程初始化阶段:执行类构造器方法<clini...原创 2021-08-03 11:37:35 · 57 阅读 · 0 评论 -
JVM和Java体系架构
Java虚拟机:一次编译,到处运行 自动内存管理 自动垃圾回收功能JVM的架构模型:一种基于栈的指令集架构,栈的优点:跨平台,指令集小,编译器容易实现,缺点是性能比寄存器差一些一种是基于寄存器的指令集架构。JVM的生命周期:虚拟机的启动:通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的。虚拟机的执行:执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程...原创 2021-08-03 10:57:41 · 56 阅读 · 0 评论