
JVM
文章平均质量分 78
JVM学习总结
na_tion
601194865@qq.com
展开
-
JVM-05-02--系统性能排查
一、什么是load averagetop命令中显示的load average,表示最近1分钟、5分钟和15分钟的系统平均负载:1.1 load average如何计算而来1、在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。2、进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程原创 2022-04-05 01:58:55 · 1532 阅读 · 0 评论 -
Java基础--03--String
一、String底层结构public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[]; ...JDK8及之前,String类的当前实现是将字符存储在char数组中,每个字符使用两个字节(16位)。实践发现,字符串是堆的主要组成部分(占比25%)+大多数字符串对象只包含拉原创 2021-03-27 20:27:57 · 249 阅读 · 0 评论 -
JVM-01-JVM基础-03-运行时常量池
一、常量池中都包含啥1、常量池是一张表,其中包含多种常量-->从编译时已知的数字、文字;到必运行时解析的方法和字段引用。2、JVM指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息。举例:(1)类package com.fupng3.jvm;public class Hello { private String name; final int AGE=30; public static void main(String[] arg原创 2022-03-21 21:57:53 · 868 阅读 · 0 评论 -
JVM-01-JVM基础-02-方法区(元空间)
1、方法区可以理解为-->编译后的代码,被加载到内存后的存储区。它存储每个类的结构,例如字段和方法等数据。2、方法区在jdk1.8之前称为永久代,jdk1.8及之后变为元空间;3、常量池在jdk1.8及之后放在堆中,jdk1.8之前是放在方法区的。一、方法区使用物理内存参考:数据拷贝过程--内存映射--mmap二、方法区内存的申请与释放方法区的内存是通过unsafe类进行申请、回收的,jvm垃圾回收与方法区内存无关。...原创 2022-03-21 20:39:25 · 739 阅读 · 0 评论 -
JVM-05-诊断cpu占用过高与线程死锁
一、诊断线程cpu占用过高步骤1、用top命令定位哪个进程对cpu的占用过高;2、查看进程的那个线程占用cpu高ps H -eo pid,tid,%cpu | grep 进程id//pid:显示进程//tid:显示线程//%cpu: 显示占用cpu占用3、jstack 进程id可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号32665为十进制,需要转为十六进制为7f99(jstack命令显示的线程id用16进制表示)二、定位线程死.原创 2022-03-21 18:03:23 · 472 阅读 · 0 评论 -
JVM-04-垃圾回收-03-常见垃圾收集器-02-分区模型-G1初探
常见垃圾回收期一、分区模型介绍(1)Serial 、Serial Old 、 Parallel 、 Parallel Old 、 ParNew 、CMS这些垃圾收集器都是基于分代收集理论,即将内存区域按照存储对象的不同分为年轻带、老年代和元空间。(2)G1 和 ZGC 逐渐淡化了这种分代的概念,堆被划分为一组大小相等的堆区域,每个堆区域都有一个连续的虚拟内存范围。 这在内存使用方面提供了更大的灵活性。G1的堆内存分配如下:(3)G1在淡化分代理论上还不是很彻底, G1保留了年轻代..原创 2021-08-27 01:14:25 · 387 阅读 · 0 评论 -
JVM-04-垃圾回收-03-常见垃圾收集器-01-分代模型
一、常见的垃圾收集器二、Serial单线程串行收集垃圾,新生代采用复制算法,老年代采用标记压缩算法,STW三、Parallel(1)多线程并行收集垃圾,新生代采用复制算法,老年代采用标记压缩算法,STW(2)java8默认,关注高吞吐量、高效利用CPU四、CMS(重点)(1)为了使垃圾收集期间,用户线程还能运行,出现了CMS收集器。CMS是一种以获取最短回收停顿时间为目标的收集器。(2)在注重吞吐量以及CPU资源的场合,都可以优先考虑 Parallel Scave..原创 2021-08-27 00:56:03 · 138 阅读 · 0 评论 -
JVM-04-垃圾回收-02-垃圾收集算法
一、标记-清除算法两个阶段“标记” + “清除”,存在两个问题:(1)如果需要标记的对象太多,效率不高 【效率问题】(2)标记清除后会产生大量不连续的碎片 【内存碎片】--基于这个缺点,进化产生了标记整理算法。二、标记整理/标记压缩算法两个阶段 “标记” + “清除”+“整理内存碎片”:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收三、标记-复制算法它将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将...原创 2021-08-26 23:29:06 · 108 阅读 · 0 评论 -
JVM-04-垃圾回收-01-如何判断为垃圾
垃圾回收,就是要把那些不再使用的对象找出来然后清理掉,释放其占用的内存空间。在java中判断对象死亡有两种方式:(1)引用计数法(2)可达性分析法一、引用计数法引用计数法简单、高效,它的做法是给对象添加一个引用计数器,每当有一个地方引用该对象,这个计数器就加1;当引用失效时,计数器就减1。如果计数器为0了,说明该对象不再被引用,成为死亡对象。不过这种算法有一个致命缺点,就是无法处理对象相互引用的情况,所以主流的虚拟机不再使用该方法。二、可达性分析它的做法是,通过一系列被称为“GC R原创 2021-08-26 22:52:17 · 517 阅读 · 0 评论 -
JVM--02--class文件
一、字节码文件1.1 字节码文件是什么源代码经过编译器编译之后便会生成一个字节码文件(.class),字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码[+操作数]构成。 ...原创 2021-04-13 17:48:13 · 233 阅读 · 0 评论 -
JVM-03-运行时数据区--01--PC寄存器与栈
类在“加载 --> 验证 --> 准备 --> 解析 --> 初始化”这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。每个JVM仅有一个运行时数据区。一、运行时数据区结构运行时数据区与内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理...原创 2021-03-22 22:38:20 · 189 阅读 · 0 评论 -
JVM--02--类加载与卸载
一、加载阶段1.1 类加载器作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 1.2类加载器分类JVM支持两种.原创 2021-03-19 15:50:35 · 2433 阅读 · 0 评论 -
JVM-01-JVM基础-01-体系结构
一、JVM引入1.1 java代码执行流程1.2 JDK体系结构JDK(Java Development ToolKit),包含了Java运行环境(JRE)和开发工具(编译器,调试器,javadoc等)。我们就是依靠JDK来开发和运行Java程序的。JDK的编译器Javac,会将Java代码编译成字节码(.class文件)。编译出的字节码在任何平台上都一样的内容,所以我们说Java语言是门跨平台语言。 JRE(Java Runtime Environment) ,它为Java提供了原创 2021-03-19 14:47:15 · 185 阅读 · 0 评论