jvm
浩丶木
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
类加载各个阶段
加载将类的字节码载入方法区中,如果这个类还有父类没有进行加载,可以先加载父类。加载和连接可能是交替运行的。连接验证阶段:验证类是否符合jvm规范,安全性检查。准备阶段:static变量分配空间和赋值是两个步骤,分配空间在准备阶段完成,赋值在初始化阶段完成。如果static变量是final的基本类型,那么编译阶段值就已经确定了,赋值在准备阶段完成。如果static变量是final的,但属于引用类型,那么赋值也会在初始化阶段完成。解析阶段:将常量池中的符号引用解析为直接引用初始化初始化即原创 2021-10-30 20:05:11 · 125 阅读 · 0 评论 -
java语法糖
指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。并且该语法糖只存在编译期。解语法糖java虚拟机并不支持所谓的语法糖。这些语法糖在编译阶段就会被还原成简单的基础语法结构。这个过程就叫做解语法糖。基本语法糖块1.switch支持String与枚举其实对于编译器来说switch中其实只能使用整型。而对于String类型的支持,是通过equals和hashcode的方法来进行实现的。先比较哈希值,再通过equals方法进行比较。2.泛型和类型擦除虚拟机中没有原创 2021-10-10 12:31:41 · 174 阅读 · 0 评论 -
类文件结构
根据jvm规范,类文件的结构如下左边对应的是每个标志所占的字节位数。魔数0~3字节,表示它是否是class类型的文件版本4~7字节,表示类的版本,此处的类的版本表示为java8常量池8~9字节,表示常量池长度,此处的常量池的长度为35项,从#1-#34项,#0项不计,这样做是为了满足某些指向常量池的索引值的数据在特定的情况下表达不引用任何一个常量池项常量池项0a为16进制,转换成10进制便是10,根据常量池表,0a表示这是一个method信息,0006和0015表示它引用了常量原创 2021-10-27 16:00:36 · 100 阅读 · 0 评论 -
垃圾回收器
回收器集合一:Serial 收集器特点:单线程、简单高效二:ParNew收集器特点:多线程、三:Parallel Scavenge 收集器特点:属于新生代收集器也是采用复制算法的收集器,又是并行的多线程收集器(与ParNew收集器类似四:Serial Old 收集器特点:同样是单线程收集器,采用标记-整理算法五:Parallel Old 收集器特点:多线程,采用标记-整理算法。六:CMS收集器特点:基于标记-清除算法实现。并发收集、低停顿七:G1收集器特点:并行与并发:G1能原创 2021-10-20 20:12:13 · 92 阅读 · 0 评论 -
直接内存的回收机制
对外内存堆外内存是相对于堆内内存的一个概念,堆内内存是由JVM所掌控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且他们遵 循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存,那么堆外内存就是存在于JVM管控之外的一块内存区域,因此,它不直接虚拟机被管控。直接内存NIO的Buffer提供了一个可以不经过JVM内存直接访问系统物理内存的类——DirectBuffer。 DirectBuffer类继承自ByteBuffer,但和普通的ByteBuffer不同,普通的原创 2021-10-19 09:40:24 · 542 阅读 · 0 评论 -
java编译期
前端编译器:把java文件转变成为class文件的过程。JDK的javac中的增量式编译器即时编译器:运行期把字节码转变成本地机器码的过程。Hotspot虚拟机的c1,c2编译器提前编译器:直接把程序编译成与目标机器指令集相关的二进制代码过程。JDK的jaotc从java代码的总体结构来看,编译过程大致可以分为1个准备阶段和3个处理过程1.准备阶段:初始化插入式注解处理器2.解析与充填符号表过程3.插入式注解处理器的注解处理过程4.语义分析与字节码生成过程注:上述3个处理过程里面,执行插入式原创 2021-10-14 09:47:23 · 149 阅读 · 0 评论 -
垃圾回收-算法
标记清除算法首先标记出所有需要回收的对象,在标记完成之后,统一回收掉所有被标记的对象。缺点:当有大量的对象需要被回收的时候,会导致标记和清除两个过程的执行效率都随着对象数量增长而降低会产生大量不连续的内存碎片标记复制算法将可用内存按照容量划分大小相等的两块,每次只使用其中的一块。当这一块的内存用完之后,就将还存活的对象复制到另外一块上面,然后再把已经使用过的内存空间一次清理掉。缺点:产生大量的内存空间复制的开销标记整理算法先对对象进行标记,然后让所有存活的对象都向内存空间一段进行移动然后原创 2021-09-07 20:37:14 · 113 阅读 · 0 评论 -
JVM监控,故障排除工具
jps:虚拟机进程状态工具可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。命令格式:jps 【options】【hostid】相关参数:-q 只能输出LVMID,省略主类的名称-m 输出虚拟机进程启动的时候传递给主类main()函数的参数-l 输出主类的全名,如果进程执行的是jar包,则输出jar路径-v 输出虚拟机进程启动时候的JVM参数jstat-虚拟机统计信息工具用于监视虚拟机各种运行状态信息的命令行工具。可以显示本地或者远程虚拟机进程中的原创 2021-09-06 10:46:26 · 164 阅读 · 0 评论 -
垃圾回收机制
引用技术算法在对象中添加一个引用计数器,每有一个地方引用他的时候,计数器就会加1;当引用失效的时候,计数器的值就会减1,任何时刻的计数器为零的对象就是不可能再被使用。缺点:当引用变量互相引用这对方,他们的引用计数都不为零,但实际上相应的两个对象不再被使用和访问,但是引用技术算法无法对他们进行回收。可达性分析算法通过一系列称为GC Roots的根对象作为起始节点集,从这些节点开始根据已引用关系向下搜索,搜索过程所走过的路径称为引用链。如果某个对象的GC Roots间没有任何引用链相连,证明此对象是不可原创 2021-09-05 14:14:56 · 103 阅读 · 0 评论 -
java虚拟机栈
栈帧:每个方法运行的时候需要的内存。其内存用于存储局部变量表,操作数帧等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。活动栈帧:在栈顶部的方法,每个线程只能有一个活动栈帧,对应这当前正在执行的方法。常见问题垃圾回收是不会涉及到栈内存,gc主要回收堆上的对象,而且栈的弹出就已经释放了栈帧所占用的内存。如果方法内局部变量没有逃离方法的作用访问,他是线程安全的如果局部变量引用了对象,并逃离了作用的访问,他是线程不安全的栈内存溢出1.栈帧过多导致栈内存原创 2021-08-31 18:19:51 · 155 阅读 · 0 评论 -
程序计数器
在jvm的概念模型里面,字节码解释器工作的时候就是通过改变这个计数器的值来选取下一跳需要执行的字节码指令,他是程序控制流的指示器,许多基础功能都需要依赖这个计数器来完成。作用:记住下一条jvm指令的执行地址特点:1.线程私有的2.不会存在内存溢出...原创 2021-08-31 09:52:33 · 123 阅读 · 0 评论
分享