随笔分类 -  JVM

JVM相关的问题以及探究
摘要:JVM:Java virtual machine(java虚拟机) 我们都知道java语言是可以夸系统的,正是使用虚拟机技术,java可以编译成虚拟机可以识别的指令,然后在虚拟机上运行。不同的系统统一遵循java虚拟机规范(https://docs.oracle.com/javase/specs/j 阅读全文
posted @ 2021-03-25 23:18 蒙恬括 阅读(1725) 评论(0) 推荐(0) 编辑
摘要:一:Metaspace介绍 我们都知道jdk8之前有perm这一整块内存来存klass等信息,我们的参数里也必不可少地会配置-XX:PermSize以及-XX:MaxPermSize来控制这块内存的大小,jvm在启动的时候会根据这些配置来分配一块连续的内存块,但是随着动态类加载的情况越来越多,这块内 阅读全文
posted @ 2021-02-24 21:45 蒙恬括 阅读(868) 评论(0) 推荐(0) 编辑
摘要:1:关于visualVM的使用介绍 参见:https://www.cnblogs.com/krock/p/14419459.html 2:测试 环境:jdk1.8, window 1)Metaspace OOM 测试代码: public static void main(String[]args) 阅读全文
posted @ 2021-02-20 15:34 蒙恬括 阅读(2868) 评论(0) 推荐(0) 编辑
摘要:参考:https://www.cnblogs.com/lizhonghua34/p/7307139.html 阅读全文
posted @ 2021-02-20 14:49 蒙恬括 阅读(125) 评论(0) 推荐(0) 编辑
摘要:参考原博文:https://blog.csdn.net/weixin_34026276/article/details/85930598 Java VisualVM默认没有安装Visual GC插件,需要手动安装,JDK的安装目录的bin目录下双击jvisualvm.exe,即可打开Java Vis 阅读全文
posted @ 2021-02-20 10:17 蒙恬括 阅读(1333) 评论(0) 推荐(0) 编辑
摘要:1:标准参数 标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。 我们可以通过 -help 命令来检索出所有标准参数。 关于这些命令的详细解释,可以参考官网:https://docs.oracle.com/javase/7/docs/techno 阅读全文
posted @ 2021-02-19 17:09 蒙恬括 阅读(240) 评论(0) 推荐(0) 编辑
摘要:JVM内存结构 主要参考在CSDN写的一篇内容:https://blog.csdn.net/A7_A8_A9/article/details/106007906 Java内存模型和JVM内存结构的对比主要参考:https://zhuanlan.zhihu.com/p/29881777 补充: JDK 阅读全文
posted @ 2021-02-19 15:47 蒙恬括 阅读(69) 评论(0) 推荐(0) 编辑
摘要:前言: 所有的垃圾回收算法都要经历标记阶段。如果GC线程在标记的时候暂停所有用户线程(STW),那就没三色标记什么事了。但是这样会有一个问题,用户线程需要等到GC线程标记完才能运行,给用户的感觉就是很卡,用户体验很差。 现在主流的垃圾收集器都支持并发标记。什么是并发标记呢?就是标记的时候不暂停或少暂 阅读全文
posted @ 2021-02-17 22:30 蒙恬括 阅读(897) 评论(0) 推荐(0) 编辑
摘要:G1及其后出现的垃圾收集器ZGC、Shenandoah,它们都是基于Region的内存布局形式。它们垃圾收集的目标范围不再是整个新生代(Minor GC)、老年代(Majon GV)、整个堆(Full GC),而是一个一个的Region。因为这样的内存布局,所以G1能做到面向局部收集。 每个Regi 阅读全文
posted @ 2021-02-17 22:14 蒙恬括 阅读(1608) 评论(0) 推荐(1) 编辑
摘要:对象是否存活判断算法: 即判断JVM中的所有对象,哪些对象是存活的,哪些对象可回收的算法。 1:引用计数。 最简单的垃圾判断算法。 在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数+1,当引用失效时,计数-1,如果计数=0,表示没有其他对象引用,就可以被回收。 但是这个算法无 阅读全文
posted @ 2021-02-17 14:35 蒙恬括 阅读(311) 评论(0) 推荐(0) 编辑
摘要:前言: Oop-Klass体系回顾,在JVM第一篇中讲过了这部分内容,今天的内容也涉及,回顾一下。 ooPDesc MarkOopDesc:存放锁的信息,分代年龄等等 InstanceOopDesc:非数组对象 arrayOopDesc:数组对象 typeArrayOopDesc:基本数据类型数组, 阅读全文
posted @ 2021-02-01 23:37 蒙恬括 阅读(1017) 评论(0) 推荐(0) 编辑
摘要:一:两种解释器 JAVA字节码解释器: java字节码 》c++代码==》硬编码。 首先.java文件编译成字节码,遍历每行的字节码指令,因为每个字节码指令的含义都是固定的所以可以根据每行字节码指令来转成c++代码调用,最后转成硬编码(机器码)来执行。 模板解释器: 由java字节码==》硬编码。可 阅读全文
posted @ 2021-01-26 22:42 蒙恬括 阅读(124) 评论(0) 推荐(0) 编辑
摘要:常量池: 我们前面也一直说常量池有三种: 1:class文件中的常量池,前面我们解析class文件的时候解析的就是,这是静态常量池。在硬盘上。 2:运行时常量池。可以通过HSDB查看,是InstanceKlass的一个属性:ConstantPool *_constants。在方法区或者说在元空间中( 阅读全文
posted @ 2021-01-24 23:18 蒙恬括 阅读(317) 评论(0) 推荐(0) 编辑
摘要:一:不同进制之间的转换 二进制:逢2进1,数字0-1。 八进制:逢8进1,数字0-7。三位二进制表示一位八进制。三位二进制最大为111,最大为7。 十进制:逢10进1,数字0-9。四位二进制表示一位十进制数,四位二进制组合有16种数字,取其中10个作为十进制的0-9数字的表示。称为BCD编码。8-4 阅读全文
posted @ 2021-01-18 23:37 蒙恬括 阅读(325) 评论(0) 推荐(0) 编辑
摘要:前言: 我们都知道判断两个类是不是同一个,要根据类加载器和全限定名。这是为什么呢?为什么不同的类加载器加载同一个类是不同的呢? 答案就是,不同的类加载器所加载的类在方法区的存储空间是不同的即InstanceKlass的不同。不同类加载器之间的空间是分隔开的。同一个类在一个类加载器中只会加载一次。 双 阅读全文
posted @ 2021-01-10 19:11 蒙恬括 阅读(1244) 评论(0) 推荐(0) 编辑
摘要:类加载器我们都知道有如下的继承结构,这个关系只是逻辑上的父子关系。 我们一直听说引导类加载器没有实体,为什么没有实体呢? 因为引导类加载器只是一段C++代码并不是什么实体类,所谓的引导类加载器就是那一段C++逻辑,让JVM从C++代码转到Java代码来加载其它类。 一:引导类加载器/启动类加载器到底 阅读全文
posted @ 2020-12-31 17:07 蒙恬括 阅读(338) 评论(0) 推荐(0) 编辑
摘要:类从被加载到虚拟机内存中开始,到卸载出内存为止,它的的整个生命周期包括: 加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)七个阶段。 其中验证 阅读全文
posted @ 2020-12-25 18:28 蒙恬括 阅读(269) 评论(0) 推荐(0) 编辑
摘要:一:oop-kclass模型 思考:我们平时写的java类编译成.class文件,JVM加载.class文件,那么加载.class文件之后在JVM中就是oop-kclass(C++)模型形式存在的。 JVM内部基于oop-klass模型描述一个java类以及其实例(对象),java类元信息用klas 阅读全文
posted @ 2020-12-17 18:06 蒙恬括 阅读(1095) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示