
JVM
文章平均质量分 86
张施文
问题不大,个人公号:北辰游戏工作室
展开
-
JVM18运行时参数
由于多核的原因,一般的 GC 事件中,real time 是小于 sys time + user time 的,因为一般是多个线程并发的去做 GC,所以 real time 是要小于 sys + user time 的。针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)目前,只有 G1 GC 会有这种行为。括号外:GC 回收前年轻代和老年代大小,回收后大小,(年轻代和老年代总大小)原创 2023-02-23 00:23:05 · 272 阅读 · 0 评论 -
JVM17GUI工具
为此,JDK 提供了一些内存泄漏的分析工具,如 jconsole,jvisualvm 等,用于辅助开发人员定位问题,但是这些工具很多时候并不足以满足快速定位的需求。所以这里我们介绍的工具相对多一些、丰富一些。jconsole:JDK 自带的可视化监控工具。查看 Java 应用程序的运行概况、监控堆信息、永久区(或元空间)使用情况、类加载情况等Visual VM:Visual VM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的应用程序的详细信息。原创 2023-02-22 23:24:45 · 613 阅读 · 0 评论 -
JVM19OQL 语言查询对象信息
MAT 支持一种类似于 SQL 的查询语言 OQL(Object Query Language)。OQL 使用类 SQL 语法,可以在堆中进行对象的查找和筛选。原创 2023-02-28 00:00:00 · 323 阅读 · 0 评论 -
JVM20浅堆深堆与内存泄露
浅堆是指一个对象所消耗的内存。在 32 位系统中,一个对象引用会占据 4 个字节,一个 int 类型会占据 4 个字节,long 型变量会占据 8 个字节,每个对象头需要占用 8 个字节。根据堆快照格式不同,对象的大小可能会同 8 字节进行对齐。以 String 为例:2 个 int 值共占 8 字节,对象引用占用 4 字节,对象头 8 字节,合计 20 字节,向 8 字节对齐,故占 24 字节。(jdk7 中)这 24 字节为 String 对象的浅堆大小。原创 2023-02-22 23:24:22 · 256 阅读 · 0 评论 -
JVM16命令行
在我们刚接触 java 学习的时候,大家肯定最先了解的两个命令就是 javac,java,那么除此之外,还有没有其他的命令可以供我们使用呢?我们进入到安装 jdk 的 bin 目录,发现还有一系列辅助工具。这些辅助工具用来获取目标 JVM 不同方面、不同层次的信息,帮助开发人员很好地解决 Java 应用程序的一些疑难杂症。原创 2023-02-22 16:39:56 · 243 阅读 · 0 评论 -
JVM15JVM调优
监控的依据运行日志异常堆栈GC 日志线程快照堆转储快照调优的大方向合理地编写代码充分并合理的使用硬件资源合理地进行 JVM 调优。原创 2023-02-21 05:00:00 · 236 阅读 · 0 评论 -
JVM14 类加载器
用户自定义类加载器在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的。在必要时,我们还可以自定义类加载器,来定制类的加载方式。体现Java语言强大生命力和巨大魅力的关键因素之一便是,Java开发者可以自定义类加载器来实现类库的动态加载,加载源可以是本地的JAR包,也可以是网络上的远程资源。通过类加载器可以实现非常绝妙的插件机制\color{red}{通过类加载器可以实现非常绝妙的插件机制}通过类加载器可以实现非常绝妙的插件机制,这方面的实际应用案例举不胜举。原创 2023-02-21 04:00:00 · 300 阅读 · 0 评论 -
JVM13 类的生命周期
按照 Java 虚拟机规范,从 class 文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下 7 个阶段:其中,验证、准备、解析 3 个部分统称为链接(Linking)从程序中类的使用过程看。原创 2023-02-20 22:21:28 · 230 阅读 · 0 评论 -
JVM12 字节码指令集
iload 从局部变量中装载int类型值lload 从局部变量中装载long类型值fload 从局部变量中装载float类型值dload 从局部变量中装载double类型值aload 从局部变量中装载引用类型值(refernce)iload_0 从局部变量0中装载int类型值iload_1 从局部变量1中装载int类型值iload_2 从局部变量2中装载int类型值iload_3 从局部变量3中装载int类型值lload_0 从局部变量0中装载long类型值。原创 2023-02-20 21:18:32 · 853 阅读 · 0 评论 -
JVM12 class文件
在 Java 语言中,要重载(Overload)一个方法,除了要与原方法具有相同的简单名称之外,还要求必须拥有一个与原方法不同的特征签名,特征签名就是一个方法中各个参数在常量池中的字段符号引用的集合,也就是因为返回值不会包含在特征签名之中,因此 Java 语言里无法仅仅依靠返回值的不同来对一个已有方法进行重载。在 interfaces[]中,各成员所表示的接口顺序和对应的源代码中给定的接口顺序(从左至右)一样,即 interfaces[0]对应的是源代码中最左边的接口。常量池中的每一项都具备相同的特征。原创 2023-02-20 20:45:21 · 318 阅读 · 0 评论 -
JVM11 垃圾回收
而且在限定单核cpu才可以用。现在都不是单核的了。对于交互较强的应用而言,这种垃圾收集器是不能接受的。一般在Java web应用程序中是不会采用串行垃圾收集器的。截止JDK1.8,一共有7款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。GC发展阶段:Seria l=> Parallel(并行)=> CMS(并发)=> G1 => ZGC不同厂商、不同版本的虚拟机实现差距比较大。原创 2023-02-20 01:14:41 · 827 阅读 · 0 评论 -
JVM10垃圾回收算法
垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序的结束,被保留的空间无法被其它对象使用,甚至可能导致内存溢出。原创 2023-02-19 18:36:51 · 485 阅读 · 0 评论 -
JVM08 StringTable
总结string的intern()的使用:JDK1.6中,将这个字符串对象尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址JDK1.7起,将这个字符串对象尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址在JDK6中,在字符串常量池中创建一个字符串 “ab”原创 2023-02-17 01:01:27 · 305 阅读 · 0 评论 -
JVM09执行引擎
执行引擎属于JVM的下层执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。原创 2023-02-17 03:00:00 · 324 阅读 · 0 评论 -
JVM07直接内存
直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区使用下列代码,直接分配本地内存空间。原创 2023-02-16 21:47:20 · 331 阅读 · 0 评论 -
JVM06
new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造器使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中的clone接口使用序列化:序列化一般用于Socket的网络传输第三方库 Objenesis。原创 2023-02-16 23:30:00 · 154 阅读 · 0 评论 -
JVM05 方法区
Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中。原创 2023-02-16 22:00:00 · 331 阅读 · 0 评论 -
JVM04 堆
针对幸存者s0,s1区的总结:复制之后有交换,谁空谁是to关于垃圾回收:频繁在新生区收集,很少在老年代收集,几乎不再永久代和元空间进行收集新生代采用复制算法的目的:是为了减少内碎片。原创 2023-02-15 23:13:35 · 184 阅读 · 0 评论 -
JVM03运行时数据区
运行时数据区是否存在Error是否存在GC程序计数器否否虚拟机栈是否本地方法栈是否方法区是(OOM)是堆是是。原创 2023-02-14 23:38:29 · 101 阅读 · 0 评论 -
JVM02类加载子系统
在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏。原创 2023-02-14 00:51:14 · 159 阅读 · 0 评论 -
JVM01
java 7 后,java虚拟机平台可运行非java程序它只关心“字节码”文件最强大的虚拟机2000年 java HotSpot VM 默认虚拟机2008 JRockit 虚拟机2011 启用G12017 默认G1 替换 CMS2018 ZGC垃圾回收器 实验性 jdk11java编译器基于栈的指令集架构,零地址指令分配 原因 :跨平台性,指令集小,指令多;性能比寄存器差性能优秀javap -v **.class 反编译。原创 2023-02-12 23:58:55 · 122 阅读 · 0 评论