
jvm
文章平均质量分 86
记录本人跟着尚硅谷学习的jvm
ayugudu
兴趣使然
展开
-
jvm运行时参数解析
文章目录1 -X参数选项1.1 设置初始java堆大小1.2 设置最大java堆大小1.3 设置java线程堆栈的大小1.4 混合模式1.5 仅解释模式执行2 -XX参数选项3 常用的参数选项3.1 打印所有xx选项的默认值3.2 打印出xx选项在运行生效的值3.3 堆内存的参数设置3.3.1 初始化堆大小3.3.2 设置堆最大容量3.3.3 设置年轻代大小(初始化与最大值)3.3.4 设置年轻代初始值3.3.5 设置年轻代最大值3.3.6 设置年轻代eden区与survivor区的比值3.3.7 自动选择原创 2021-07-17 15:09:38 · 161 阅读 · 1 评论 -
jvm 内存泄露
文章目录1概述2内存泄露的理解3 内存泄露和内存溢出的关系4 内存泄漏的八种情况1概述可达性分析判断对象是否不再被使用,但由于代码的实现不同会出现很多内存泄露问题(jvm误以为此对性还在引用,无法被回收)是否还被使用? 是是否还被需要? 否此时就是内存泄露2内存泄露的理解严格来说,只有对象不会在被程序用到了,但是gc又不能回收他们的情况,叫做内存泄露。但是实际情况由于一些不好的代码习惯导致的对象生命周期很长甚至导致oom可以称为宽泛意义上的“内存泄露”3 内存泄露和内存溢出原创 2021-07-16 19:33:55 · 289 阅读 · 1 评论 -
jvm 性能优化(指令篇)
文章目录1 性能优化的步骤2 性能评价指标3 性能监控3.1 查看当前运行的java进程3.2 查看jvm统计信息3.3 怎样判断是否出现oom3.4 jstat 判断内存溢出3.5 实时查看并修改jvm参数配置3.5.1 查看曾经赋过值的一些参数3.5.2 查看某个java进程的具体参数的值3.5.3 修改boolean类型的值3.5.4 针对非boolean类型的值3.6 扩展3.6.1 查看jvm参数启动的初始值3.6.2 查看所有jvm参数的最终值3.6.3 查看被用户设置过的详细信息3.7 jma原创 2021-07-15 19:42:40 · 173 阅读 · 1 评论 -
jvm 类加载器详解
文章目录1 概述1.1 命名空间与唯一性1.2 类加载器基本特征2 类加载器的分类2.1 启动类加载器2.3 扩展类加载器2.4 系统类加载器2.5 Class.forname()与classLoader.loadClass()2.6 classloader 源码解析3 双亲委派机制3.1 双亲委派机制优势3.2 双亲委派模式的弊端3.3 双亲委派机制加载原理(loadclass)3.4 双亲委派机制的破坏3.5 代码的热替换3.6 沙箱安全机制3.7 自定义类加载器3.7.1 实现自定义类加载器1 概述原创 2021-07-14 19:16:20 · 263 阅读 · 0 评论 -
jvm 类的加载流程详解
文章目录1 概述2 loading 加载2.1 加载概述2.2 加载流程2.2.1 二进制流的获取方式2.2.2 类模型及class类实例的位置3 linking 连接阶段3.1 验证3.2 准备阶段3.3 解析阶段4 初始化阶段4.1 流程5 类的主动使用与被动使用5.1 主动使用5.2 被动使用6 类的使用7类的卸载7.1 类,类加载器,类实例之间关系7.2 类的生命周期1 概述java中数据类型分数为基本数据类型和引用数据类型,基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。2原创 2021-07-13 17:37:25 · 287 阅读 · 1 评论 -
jvm 字节码指令
1 字节码概述java字节吗对于虚拟机来说,属于基本执行指令jvm的指令由一个字节长度(操作码)以及代表此操作所需参数(**操作数)**构成,由于jvm面向操作数栈,所以多数指令不包含操作数,只有操作码。2 指令与数据类型关系它们的操作码助记符中都有特殊的字符表明专门为那种数据类型服务:i 代表对int类型的数据操作。l 代表longs 代表shortb 代表bytec 代表charf 代表floatd 代表double注意:大部分指令都没原创 2021-07-12 16:34:56 · 404 阅读 · 0 评论 -
jvm class文件内容
文章目录1 class 文件概述2 魔数3 文件版本号1 class 文件概述字节码文件是什么字节码是一种二进制的类文件,其内容是jvm的指令。什么是字节码指令jvm指令是由某种特定操作的操作码与此操作所需的参数的操作数构成的Class类的本质任何一个class文件都对应这唯一 个类或接口的定义信息(并不一定以磁盘形式存在),class文件是以8位字节为基础单位的二进制流。class文件格式有两种数据类型:无符号数和表无符号数属于基本的数据类型,以u1,u2,u4,u原创 2021-07-09 19:10:43 · 116 阅读 · 0 评论 -
超详细!jvm垃圾收集器学习笔记
文章目录1 垃圾收集器分类2 评估gc的性能指标3 垃圾收集器的分类3.1 垃圾收集器与垃圾分代之间的关系4 查看默认的垃圾回收器5 Serial 回收器:串行回收6 parnew回收器:并行回收7 parallel回收器:并行且吞吐量优先8 cms回收器:低延迟8.1 cms工作原理8.2 三色标记8.3 cms 特点8.4 cms 为什么不使用标记压缩算法8.5 使用cms8.6 小结9 g1收集器:区域分代化9.1 g1 由来9.2 g1 特点9.3 g1 参数设置9.4 设计原则9.5 分区Reg原创 2021-06-25 15:55:05 · 192 阅读 · 0 评论 -
一文搞懂jvm 中强引用软引用弱引用虚引用
文章目录1 前言2 强引用-不回收3 软引用 - 内存不足即回收4 弱引用-发现即回收5 虚引用-对象回收跟踪1 前言我们希望有这样一类对象,当内存空间足够时,则保留在内存中,当内存空间进行gc后还是很紧张,则可以直接抛弃这些对象。将这些引用分为强引用,软引用,弱引用,虚引用强引用:最传统的引用定义,在程序中普遍存在的引用复制类似Object obj =new Object(),只要强引用关系还存在,垃圾收集器永远不会回收掉被引用的对象。软引用:在系统将发生内存溢出之前,将这些对象放入回收原创 2021-06-23 20:31:33 · 231 阅读 · 0 评论 -
jvm垃圾回收相关概念(内存泄露,溢出,并发,并行,安全点,安全区域)
文章目录1 System.gc()的理解2 内存溢出2.1 原因:3 内存泄露4 stop the world5 并发与并行5.1 并发5.2 并行5.3 并发与并行的区别6 垃圾回收的并发与并行6.1 并行6.2 串行6.3 并发7 安全点与安全区域7.1 安全点7.2 安全区域1 System.gc()的理解通过system.gc()的调用,会显式触发Full Gc,同时对老年代和新生代进行回收然而System.gc 无法保证对垃圾收集器的调用(相当于是只通知垃圾收集器)2 内存溢出原创 2021-06-23 16:46:20 · 265 阅读 · 0 评论 -
jvm垃圾回收算法详解
文章目录1 什么是垃圾?2 为什么需要gc3 垃圾回收算法3.1 标记阶段3.1.1 引用计数算法3.1.2 可达性分析算法3.2 对象的finalization 机制3.2 清除阶段3.2.1 标记-清除算法3.2.2 复制算法3.2.3 标记-压缩算法3.2.3 对比三种算法3.2.4 分代收集算法3.2.5 增量收集算法1 什么是垃圾?垃圾是指在运行程序中没有任何指针指向的对象如果不及时对内存中垃圾进行清理,这些垃圾对象所占的内存空间会一直保留到应用程序结束,甚至会导致内存溢出。2原创 2021-06-22 16:50:53 · 156 阅读 · 0 评论 -
jvm 直接内存
概述直接内存时在java堆外的,直接向系统申请的内存空间。来源于nio通常,访问直接内存的速度会由于java堆,读写性能高也可能导致oom:Direct Buffer memory缺点分配回收成本较高不受jvm内存回收管理可以通过MaxDirectMemoeySize进行指定大小,默认是与堆的最大值-Xmx参数值一致的。不使用直接内存需要用户态转化成核心态在操作使用直接内存...原创 2021-06-20 16:46:23 · 91 阅读 · 0 评论 -
jvm string 学习笔记
1 String的基本特性string: 字符串,使用一对“”引起来表示String s1 = “ayugudu”;String s2 = new String(“ayugudu”);String 声明为final的,不可被继承String 实现了Serializable接口:表示字符串是支持序列化的。String 实现了Comparable接口:表示string可以比较大小String 在jak8以前内部定义了final char[] value 用于存储字符串数原创 2021-06-20 16:42:46 · 86 阅读 · 0 评论 -
jvm 对象实例详解
文章目录1 对象实例化1.1 创建对象的方式1.2 字节码角度查看创建对象1.3 对象创建的步骤1.3.1 判断对象对应的类是否加载,链接,初始化1.3.2 为对象分配内存1.3.3 处理并发安全问题1.3.4 初始化分配到的空间1.3.5 设置对象的对象头1.3.6 执行init方法进行初始化2 对象的内存布局2.1 对象头2.2 实例数据2.3 对齐填充3 对象访问定位3.1 句柄访问3.2 直接指针(hotspot采用)1 对象实例化1.1 创建对象的方式new变形1:XXX的静态方法变原创 2021-06-18 16:33:53 · 555 阅读 · 0 评论 -
jvm方法区学习笔记
文章目录1 运行时数据区结构图2 方法区的基本理解3 hotspot中方法区的演进4 设置方法区内存的大小5 如何解决oom6 方法区内部结构6.1 方法区之间到底存储了什么6.1.2 类型信息6.1.3 域信息(属性)6.1.4 方法信息6.1.5 静态类变量6.1.6 全局常量6.1.7 运行时常量池6.2 方法区的演进细节6.2.1 jdk1.6及以前6.2.2 jdk1.76.2.3 jdk1.8及以后6.2.4 永久代为什么会被元空间给替代7 方法区的垃圾收集1 运行时数据区结构图从线原创 2021-06-17 22:22:43 · 125 阅读 · 0 评论 -
jvm minor gc,major gc ,full gc学习笔记
1 minor gc,major gc ,full gcjvm 在进行gc时,并非每次都对上面的上内存(新生代,老年代,方法区)区域一起回收,大部分回收的都是指新生代对于hotspot vm 实现,它里面的gc按照回收区域分为两大类型:一种是部分收集(partial gc),一种是整堆收集(Full Gc)。部分收集新生代收集(Minor gc / young gc):只是新生代的垃圾收集老年代收集(Major gc / old gc):只是老年代的垃圾收集整堆收集(Full gc原创 2021-06-15 17:11:25 · 702 阅读 · 0 评论 -
jvm 堆区学习笔记
文章目录1 堆概述1.1 堆内存细分1.2 堆空间大小的设置1.2.1 通过参数设置1.2.2 默认空间大小1.2.3 通过参数设置堆空间大小后内存不一致问题1.3 年轻代与年老代1.4 对象分配过程1 堆概述一个jvm实例(进程)只存在一个堆内存,堆也是java内存管理的核心区域。java 堆区在jvm启动时即被创建,其空间大小也就被确定了《java虚拟机规范》规定,堆可以处于物理上不连续的内存空间,但在逻辑上它应该被称为连续的所有线程共享java堆,在这里和可以划分线程私有的缓原创 2021-06-14 19:51:40 · 1426 阅读 · 3 评论 -
jvm通过参数设置堆空间大小后内存不一致问题
1 设置内存空间为3002 通过代码查看内存/** * @program: jvmDemo * @description: * @author: wfg * @create: 2021-06-14 10:40 */public class Test9 { public static void main(String[] args) { //返回jvm中的内存总量(字节) long initialMemory = Runtime.getRuntime原创 2021-06-14 11:26:55 · 428 阅读 · 0 评论 -
jvm栈学习笔记
文章目录栈概述栈与堆的区别栈的基本内容栈的特点虚拟机栈可能出现的异常栈存储的数据栈运行的原理栈帧里面存储的数据局部变量表jclasslib 中对栈区的分析局部变量表中slot分析局部变量表补充操作数栈栈顶缓存技术动态链接方法的调用链接方法的绑定虚方法与非虚方法常用的方法指令invokeddynamic解析java方法重写的本质方法返回地址本地方法栈本地方法本地方法栈栈概述由于跨平台的设计,java指令都是根据栈(指令集后进先出)来设计的。不同平台的cpu架构不同,所以不能设计基于寄存器。优点是原创 2021-06-13 16:26:04 · 1184 阅读 · 1 评论 -
jvm运行时数据区及pc
1.1 运行时数据区内存结构jvm启动时会使用到运行时数据区,其中是有与线程对应(随着虚拟机退出而销毁),另外一些则是与线程一一对应每个线程:程序计数器,栈,本地栈线程间共享:堆,方法区(jdk8后面是使用元空间-本地内存实现)1.2 RunTime介绍Runtime:运行时,是一个封装了JVM进程的类。每一个JAVA程序实际上都是启动了一个JVM进程,那么每一个进程都是对应这一个Runtime实例,其实例是由JVM为其初始化的。2 线程线程是一个程序里的运行单元HostPot原创 2021-06-10 18:14:39 · 122 阅读 · 0 评论 -
jvm类加载器
文章目录1 类加载器分类1.1启动类加载器1.2扩展类加载器1.3系统类加载器1.4为什么要自定义类加载器2双亲委派机制2.1工作原理2.2沙箱安全机制3类的主动使用与被动使用3.1jvm中表示class对象是否为同一对象的条件3.2主动使用1 类加载器分类jvm包含两种类型的类加载器,分别为 引导类加载器(bootstrap classloader) 和 自定义加载器如果一个类型时由用户加载器进行加载的,那么jvm会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中自定义加载器是 所原创 2021-06-10 18:13:12 · 113 阅读 · 0 评论 -
jvm内存与类加载器系统
文章目录1内存介绍2类加载器系统2.1 类加载阶段2.2链接阶段2.2.1验证2.2.2准备2.2.3解析2.3初始化阶段1内存介绍通过类加载器将类的信息加载到内存中,内存中的 虚拟机栈与pc计数器每个线程都是拥有独一份的执行引擎包括解释器(立马解释–步行)与即时编译器(需要等待一段时间–坐公交车)以及垃圾回收机制2类加载器系统类加载器子系统只负责对class文件的加载,加载的类信息存放在了方法区的内存空间,除了类的信息外,方法区中还存放了运行时常量池信息,还包括字符串字面量和数字常量。2原创 2021-06-10 18:11:22 · 142 阅读 · 0 评论