
JVM
文章平均质量分 81
Minor王智
好好学习,天天向上!
展开
-
深入理解Java线程
:操作系统分配资源的最小单元,是一个程序在操作系统的一个实例抽象。 :是CPU调度执行最小单元,一个进程可包含多个线程,是一个指令序列。:程序运行在用户空间,也只能访问到用户空间的数据。 :程序运行在内核空间,拥有所有资源的访问权限。进程(线程)的上下文切换只能发生在内核模式下。 上下文切换主要有三个步骤:...原创 2022-07-02 16:56:37 · 438 阅读 · 0 评论 -
[原创]JVM知识点盘点
JVM全面的面试知识点,思维导图整理,面试突击神器。原创 2022-06-28 22:50:12 · 128 阅读 · 0 评论 -
JIT即时编译
Java程序在运行的时候,主要是执行字节码指令,一般情况这些指令都是通过顺序的解释执行。如果某一些代码的执行评率特别高,JVM就引入了即时编译器来优化这些热点代码,提高java运行效率。C1编译器是一个简单快速的编译器,主要关注局部性的优化,适用于执行时间短和启动要求快的程序,例如GUI相关的程序,C1编译器只做编译工作,几乎不做优化任务。C2编译器目的是为了长期运行的程序做调优的编译器,成为Server Compiler编译器。所谓热点就是执行频率相当高的代码,这些代码由于使用非常频繁所以需要JIT优化,原创 2022-06-28 22:40:56 · 740 阅读 · 0 评论 -
Class常量池与运行时常量池
Class常量池就是Class文件中的资源仓库,Class文件除了包含类的版本、字段、方法等信息外,还有一项信息就是,存放编译器生成的和。而运行时常量池就是指JVM运行过程中类加载以后讲类的常量池载入方法区就形成了运行时常量池。字母、数字等构成的字符串或者数值的常量等信息。类、接口的全限定名 字段的名称和描述符 方法的名称和描述符在JDK1.7以前字符串常量池在永久代中,1.7以后JVM将字符串...原创 2022-06-28 22:38:55 · 490 阅读 · 0 评论 -
JVM调优命令和常见工具
列出当前系统中运行的jvm程序。 -m:输出主函数传入的参数,-l:输出应用程序主类完整包名,-v:列出jvm参数。监控jvm各种运行状态,可以显示jvm的内存使用情况、jit、类加载的各种运行情况。 显示JIT即时编译的情况。 显示堆的状态。 显示堆区的各个分代情况。查看和修改jvm的参数 显示jvm的参数。可以用来查看和导出jvm的内存运行情况以及内存中实例的占比情况。...原创 2022-06-27 23:46:57 · 397 阅读 · 0 评论 -
[原创]JVM垃圾回收机制和常见垃圾收集器-CMS、G1、ZGC
现代大部分的虚拟机的垃圾回收器都遵循“分代收集”的理论基础来进行设计实现: 根据这个理论基础,JVM的大部分虚拟机将堆空间逻辑划分为新生代/年轻代、老年代,垃圾收集器可以根据不同的区域选择不同的回收算法进行GC。 将内存分隔为两块相同大小的区域,每次只使用其中的一块,每当GC完成后,将存活的对象复制到另一块区域,然后将前一块清空。分为标记和清除两个阶段,标记存活的对象,然后GC清除掉没有被标记的对象。这种算法实现简单,但是有2个缺点...原创 2022-06-27 23:45:01 · 2120 阅读 · 0 评论 -
Java对象的分配和内存布局
当JVM执行到执行时(new、克隆、反序列化等),先去常量池中是否能定位到该类的,并检查该符号引用对应的类是否已经加载并解析完成,如果没有则进入类加载流程。因为如果类还没有加载,那么此时分配类对应的对象是没有任何意义的,对象的所有信息都要来自于Class。因为对象的实际内存大小在类加载阶段早已确定,所以分配内存空间这个流程就是在堆内存中开辟一个确定好大小的地址空间;但是分配内存这个阶段有2个问题需要解决:如何分配?并发安全问题如何保障?如果堆内存时绝对整齐的,所有的使用和未使用的内存是划分开来,将一个地址指原创 2022-06-27 23:36:45 · 895 阅读 · 0 评论 -
Class文件结构和字节码指令
Class文件具有平台无关性,所有运行平台的字节码文件格式都是统一的。Class文件也具有向后兼容的特性,Class文件结构在JDK1.2的时候就已经规定好了。 Class文件是一组以8字节为单位的二进制流文件,各个数据项按照严格的顺序排列,中间没有任何的分隔符,Class文件有两种数据类型...原创 2022-06-27 23:31:25 · 315 阅读 · 0 评论 -
JVM内存模型
JVM运行过程中存储当前线程运行所需的指令、数据、引用地址等信息。 Java调用native方法时候的线程栈结构,部分虚拟机将本地方法栈和虚拟机栈合并。 :当前线程执行的字节码的行号指示器。 :常规JVM最大的内存区域,逻辑上是连续的,堆保存了绝大部分的对象,少部分会是栈。堆也是GC发 生地之一。 :JVM的逻辑划分,不同版本有不同的实现。JDK8以前实现叫,现在叫的实 现。包括类的元数据信息、常量池等。 :又称,他不是JVM虚拟机的..原创 2022-06-27 23:28:40 · 813 阅读 · 0 评论 -
Java类加载机制和双亲委派模型
我们在使用一个Java类的时候,比如使用累的静态属性或者new一个对象,JVM虚拟机会将我们目标类的文件加载到JVM特定的内存区域,然后经过一系列的加载流程,最后我们的程序才能够使用,这整个流程称之为,也就是说我们要使用一个类,必须先加载才能使用。当然,一个类的声明周期不单单只是加载,还有许多阶段,例如初始化、卸载等操作。 JVM类加载是通过一系列的类加载器进行实现,类加载器具有加载一个.class的文件能力,不同的类加载器有着不同的效果。 如图所示,我们要使用自己写的com.minor.test类,则J原创 2022-06-27 23:24:14 · 1042 阅读 · 1 评论 -
JVM内存模型系列(堆、方法区以及对象和GC)
上文已经介绍了JVM内存模型中线程私有的部分(虚拟机栈、本地方发栈、程序计数器),那么本篇文章就来探讨下JVM中线程共享的区域:堆、方法区 方法区 方法区是JVM规范中定义的一个逻辑内存,在JDK1.8以前对方法区的实现叫做“永久代”,然而在JDK1.8以后讲“永久代”废弃,改为“元空间”对其方法区进行实现,并且存储位置是本地内存,但是它依旧是JVM的逻辑区域。方法区存储了每一个类的结构信息 、常量、静态变量、即时编译器编译后的代码缓存等数据。 常量池 静态常量池 Class文件中除了有类的版本、字段、方原创 2020-07-26 12:20:01 · 638 阅读 · 0 评论 -
JVM内存模型系列(虚拟机栈、本地方法栈、程序计数器)
JVM作为运行Java程序的平台,我们Java程序员必须要去了解它。JVM 能涉及非常庞大的一块知识体系, 比如内存结构、 垃圾回收、 类加载、 性能调优、 JVM 自身优化技术、 执行引擎、 类文件结构、 监控工具等。但是在所有的知识体系中, 都或多或少跟内存结构有一定的关系:比如垃圾回收回收的就是内存、 类加载加载到的地方也是内存、 性能优化也涉及到内存优化、 执行引擎与内存密不可分、 类文件结构与内存的设计有关系, 监控工具也会监控内存。 所以内存结构处于 JVM 中核心位置。 也是属于我们入门 JV原创 2020-07-18 18:52:34 · 292 阅读 · 0 评论