
JVM
文章平均质量分 72
weixin_45913226
这个作者很懒,什么都没留下…
展开
-
【Redis6】Redis6笔记
Redis6学习原创 2022-06-17 18:19:47 · 2384 阅读 · 0 评论 -
【JVM】参数设置列表
1、参数查看参数功能-XX:+PrintFlagsInitial查看所有的参数默认值-XX:+PrintFlagsFinal查看所有参数的最终值(可查看修改过后的值)2、内存设置参数功能-Xms600m设置堆空间初始值为600m(默认为本机物理内存的1/64)-Xmx600m设置堆空间最大值为600m(默认为本机物理内存的1/4)-Xmn600m直接设置新生代的大小。优先于参数-XX:NewRatio(初始值和最大值)-XX原创 2022-08-19 11:50:57 · 209 阅读 · 0 评论 -
【JVM19】类的加载过程详解*
1、概述2、过程1:Loading(加载)阶段(1)加载的理解所谓加载,简而言之就是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型——类模型类的加载器只涉类加载的第一阶段——类的记载阶段,后面的链接初始化与类加载器无关。(2)类模型与Class的位置类模型的位置加载的类在JVM中创建相应的类结构,类结构会存储在方法区(JDK1.8之前:永久代;JDK1.8及之后:元空间)。Class实例的位置类将.class文件加载至元空间后,会在堆中创建一个Ja原创 2022-06-09 18:32:06 · 289 阅读 · 0 评论 -
【JVM17】垃圾回收器
讲解了7个经典垃圾回收器与未来发展的一些回收器原创 2022-06-05 15:57:54 · 2410 阅读 · 0 评论 -
【JVM16】垃圾回收的相关概念的概述
举例:System.gc()没有回收掉buffer。可以看到局部变量表的长度为2,但是局部变量只有args参数,其实还隐藏这一个buffer。这个方法里没有其他变量把buffer的slot占据,所以回收不了buffer。原因:对象不会被程序用到了(但是这个对象可能还是被引用到),但是垃圾收集器无法回收这种对象。举例:描述:当内存足够,是不会回收软引用的可达对象,当内存不够时(不一定是要发生OOM),则回收软引用可以到达的对象;软引用是用来描述一些还有用,但非必需的对象。只被软引用关联着的对原创 2022-06-03 19:40:25 · 83 阅读 · 0 评论 -
【JVM15】垃圾回收相关算法实现原理*
标记阶段:判断哪些是垃圾?清除阶段:怎么回收垃圾?1、标记阶段:引用计数算法(Hotspot虚拟机不用这个算法标记)判断对象存活引用计数算法引用计数算法无法解决循环引用4. 小结(1)引用计数算法,是很多语言的资源回收选择,例如因人工智能而更加火热的Python,它更是同时支持引用计数和垃圾收集机制。(2) 具体哪种最优是要看场景的,业界有大规模实践中仅保留引用计数机制,以提高吞吐量的尝试。(3)Java并没有选择引用计数,是因为其存在一个基本的难题,也就是很难处理循环引用关系原创 2022-06-03 14:19:19 · 78 阅读 · 0 评论 -
【JVM14】垃圾回收概述
1、什么是垃圾垃圾是指程序运行中没有任何指针指向的对象2、为什么需要GC3、早期垃圾回收如如何实现4、Java的垃圾回收机制原创 2022-05-29 16:54:04 · 64 阅读 · 0 评论 -
【JVM13】String Table(关于String)
1、String的基本特性string :字符串,使用一对""引起来表示。string sl = “atguigu” ;//字面量的定义方式string s2 = new string ( “hello”);string声明为final的,不可被继承string实现了serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示string可以比较大小String在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改原创 2022-05-29 15:46:29 · 245 阅读 · 0 评论 -
【JVM12】执行引擎
提问:为什么不直接把Java语言用JVM解释执行呢?还要加一个中间产物字节码文件呢?原因:JVM如果直接执行Java语言花费的时间成本太高了。JVM专注于把字节码指令翻译成机器指令效率更高。1、执行引擎概述"虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集。和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的原创 2022-05-27 11:00:47 · 91 阅读 · 0 评论 -
【JVM11】直接内存(了解)noIO
直接内存描述不是虚拟机运行时数据区的一部分,也不是《Java虛拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。.来源于NIO,通过存在堆中的DirectByteBuf fer操作Native内存。通常,访问直接内存的速度会优于Java堆。 即读写性能高。➢因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。➢Java的NIO库允许Java程序使用直接内存,用于数据缓冲。也可能导致OutOfMemoryError异常由于直接内存在Java堆外,因此它的原创 2022-05-26 17:01:58 · 448 阅读 · 0 评论 -
【JVM10】对象的实例化内存布局与访问定位*
1、对象的实例化美团:对象在Java虚拟机中是怎么存储的?对象头信息里面有哪些信息?(1)创建对象的方式(2)创建对象的步骤2、对象的内存布局3、对象的访问定位原创 2022-05-26 16:13:00 · 72 阅读 · 0 评论 -
【JVM9】方法区
1、栈、堆、方法区的交互关系运行时数据结构图:从线程共享与否的角度看2、方法区的理解方法区与堆空间一样,是各个线程共享的区域方法区是JVM启动时创建的,并且它也是逻辑上连续,物理上不连续。如果你系统家加载了太多的类,导致HotSpot的方法区溢出,虚拟机会抛出OOM:MeatSpace;关闭虚拟机就会释放方法区的内存;到了Java8,HotSpot虚拟机用元空间代替了永久代的概念;元空间使用的是本地内存,如果加载的类太多,本地内存放不下,照样会抛出异常:OOM:MeatSpace.原创 2022-05-25 16:24:55 · 91 阅读 · 0 评论 -
【JVM8】堆
1. 堆的核心概述一个进程对应一个JVM实例,一个JVM实例只存在一个堆内存。java堆区在JVM启动时就被创建,其空间大小就被固定了。堆内存大小是可以调节的。《Java虚拟机规范》规定,堆可以在物理上不连续空间。但在逻辑上它是连续的。所有线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)下面第10大点会详细讲到。在《Java虚拟机规范》中描述:所i有对象以及数组都对应在运行时分配的堆上。但是原创 2022-05-24 09:56:53 · 958 阅读 · 0 评论 -
【JVM7】本地方法接口与本地方法栈
1、什么是本地方法2、本地方法栈原创 2022-05-21 17:09:47 · 64 阅读 · 0 评论 -
【JVM6】虚拟机栈
1、虚拟机栈出现背景(1)由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器,基于寄存器与CPU耦合太高。(2)基于栈的优点:跨平台,指令集小(8位),编译器容易实现。缺点:性能下降,实现同样功能需要更多指令。2、内存中的堆与栈......原创 2022-05-21 16:29:02 · 95 阅读 · 0 评论 -
【JVM5】程序计数器|PC寄存器
一、介绍二、作用1.它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。2.在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。3.任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行native方法,则是未指定值 (undefned)......原创 2022-05-17 22:03:57 · 66 阅读 · 0 评论 -
【JVM4】线程回顾
前言:1、线程是一个程序里的单元。JVM允许一个应用有多个线程并行执行。2、在Hotspot虚拟机里,每个线程都与操作系统的本地线程直接映射。(1)当一个Java线程执行终止后,本地线程也会回收3、操作系统负责所有线程的安排调度到任何一个可用的CUP上,一旦本地线程初始化成功,它就会调用Java线程中的run()方法...原创 2022-05-17 20:44:46 · 50 阅读 · 0 评论 -
【JVM3】双亲委派机制
工作原理(1)如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;(2)如果父类加载器还无法加载,则再向上委托,依次递归,请求最终到顶层的引导类加载器;(3)如果父类加载器可以加载,则父类加载器加载,如果父类加载器无法加载任务,子类加载器才会去尝试自己加载。优势1、避免类的重复加载2、保护程序安全,防止核心API被恶意篡改......原创 2022-05-17 19:29:11 · 89 阅读 · 0 评论 -
【JVM2】类装载子系统
类加载器加载.class具体还要成三步:一、加载生成代表该类的Class实例二、链接1、验证:主要是验证字节码文件无误,因为字节码文件是可以被认为修改的。2、准备:准备阶段会进行默认初始化,如下代码:public class Test01 { private int i=88; public static void main(String[] args) { }}默认初始化就是在准备阶段先把 i 赋值为0,当然如果是String类型就是null;3、解析三、.原创 2022-05-17 16:59:07 · 75 阅读 · 0 评论 -
【JVM1】JVM结构图
JVM空间结构图原创 2022-05-17 16:24:07 · 57 阅读 · 0 评论