JVM
文章平均质量分 71
新时代程序猿
不更新,代表被压榨着… 学习方向:测试开发+ 算法
展开
-
Java类加载简介概括
类加载的时机一个类从被加载到虚拟机内存加载开始到卸载出内存为止,整个声明周期将经历加载 验证 准备 解析 初始化 使用 和卸载其中验证 准备 解析三个部分统称为连接加载 验证 准备 初始化 卸载 五个阶段的顺序是确定的类加载必须按照这个五个进行解析情况就不一定在某些情况下可以在初始化之后在开始 目的:为了支持Java语言的运行时绑定特性 动态绑定或者晚期绑定初始化1、遇到nnew getstati putstatic 或者invokestatic这四个字节码指令的时候 如果类型原创 2021-08-30 22:07:59 · 92 阅读 · 0 评论 -
synchronizedReentrantLock乐观锁悲观锁(Java线程安全实现)JVM9
Java语言的线程安全1、不可变2、相对线程 安全3、相对线程安全4、线程兼容5、线程对立线程安全实现1、互斥同步保持共享数据在同一时刻只被一条线程使用 互斥是实现同步的一种手段 临界区 互斥量和信号量synchronized 关键字synchronized关键字javac编译之后同步前后分别形成monitorenter 和monitorexit 两个字节码指令(1)sychronized修饰的同步块对同一条线程来说是可重入的(2)被synchronized修饰的同步块在持有锁原创 2021-08-19 13:45:27 · 357 阅读 · 0 评论 -
JVM垃圾回收这就是你心心念念的内存分配和回收策略
JVM垃圾回收这就是你心心念念的内存分配和回收策略英文单词心心念:concurrent :同步的java 技术体系的自动内存管理 ,最根本的目标是自动化的解决两个问题:自动给对象分配内存以及自动回收分配给对象内存1、对象分配内存1、概念上:在堆上分配2、经典分代上:新生对象会分配在新生代中,少数情况下因为对象体积过大超过一定阀值也可能会直接分配在老年对象分配是不固定的,具体分配在哪一个块 取决于垃圾收集器 以及虚拟机中内存相关的参数2、对象优先在Eden(伊甸园)分配大多数情况原创 2021-08-15 16:17:21 · 83 阅读 · 2 评论 -
低延迟垃圾收集器
低延迟垃圾收集器衡量垃圾收集器的三项重要的指标 内存占用 吞吐量三者构成了不可能的三角 三者总体会随技术进步而越变越好,要是这三方面同时具有卓越表现得完美收集 时极其困难得在垃圾收集器中 延迟得重要性日益凸显 越发被受关注原因随着计算机硬件得发展 性能得提升 我们越来越能容忍收集器多占一点点内存 ,硬件性能增长 对软件系统得处理能力时有直接助益的 硬件的规格和性能越高有助于收集器进行对应程序的影响 准确说 硬件越好 单位时间内吞吐量就越大但是对延迟来说反而带来负面效果原创 2021-08-15 13:47:54 · 74 阅读 · 0 评论 -
Hotspot细节实现安全区域、记忆集卡表
Hotspot细节实现3、安全区域产生原因安全点解决了如何解决线程停顿,让虚拟机进入垃圾回收状态问题。安全点机制保证了程序执行时,在不太长的时间内就会遇到可进入垃圾回收的状态但是如果程序不执行呢?比如睡眠过程中 或者阻塞过程中,不执行的时候是不知道现在是垃圾回收,醒来突然发现垃圾回收了,就很尴尬了。如果等待醒来再去安全点集合,又回花很长时间去整理 一致 后再收集 这样的情况下是肯定不能被允许的安全区域概念能够保证某段代码片段中 引用关系不会发生变化,再这个区域中任意地方开始垃圾收集都是安全的,我原创 2021-08-13 12:46:30 · 119 阅读 · 0 评论 -
HotSpot算法细节实现根节点枚举、安全点
HotSpot算法细节实现文章目录HotSpot算法细节实现1、根节点枚举弊端:解决方法:2、安全点为什么需要安全点解决安全点选定的注意:注意:1、根节点枚举 |找常量或者类静态属性 固定作为GC-Roots的节点作为根节点在全局性的引用, |与栈中的本地变量表执行上下文弊端: 1、体积大,查找麻烦 2、需要暂停服务 并且必须一致性的条件下才能进行 如果一边枚举着 引用 在变化中我们怎么确定是否要 回原创 2021-08-12 21:59:25 · 253 阅读 · 0 评论 -
CMS-GC收集器JVM
文章目录CMS收集器基于标记-清除算法大体介绍1)初始化标记 CMS initial mark2)并发标记 CMS concurrent mark3)重新标记CMS remark4)并发清除 CMS concurrent sweep优点:并发收集,低停顿 又称并发低停顿收集器缺点及原因:1、CMS收集器大队处理器资源要求非常敏感解决方法是:目前对此解决是:CMS收集器基于标记-清除算法大体介绍CMS(Concurrent Mark Sweep) 收集器1、是一种获取最短回收时间为目标的收集器原创 2021-08-11 18:04:09 · 170 阅读 · 0 评论 -
Serial Old 收集器和Patallel old收集器
文章目录Serial Old 收集器标记整理方法Parallel Old收集器标记整理方法之前缺点现在Patallel Old出现之后 草鸡变凤凰Serial Old 收集器Serial Old 是Serial收集器的老年代版本 同样是单线程收集器 使用标记整理算法标记整理方法这个收集器主要意义也是供客户端模式下的HotSpot虚拟机使用 如果在服务端模式下 也是有两种用途1、一种是在JDK5以及之前的版本中Parallel Scavenge收集器搭配使用2、 作为CMS收集原创 2021-08-09 21:56:58 · 100 阅读 · 0 评论 -
Parallel ScavengeGC收集器
Parallel Scavenge收集器文章目录Parallel Scavenge收集器关注点:Parallel Scavenge 收集器提供了两个用于精准控制吞吐量一个是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数以及直接设置吞吐量大小的-XX:GCTimeRatio参数Parallel Scavenge 收集器 是一款新生代收集器 同样是标记-复制算法实现的收集器也是可以进行并行手机的多线程收集器Parallel Scavenge的诸多特性从表面上来看和ParNew相似原创 2021-08-09 21:00:47 · 400 阅读 · 4 评论 -
Serial-JVM垃圾收集器
Serial收集器serial收集器 是最基础历史最悠久的的收集器 曾静是HotSpot虚拟机新生代收集器的唯一选择工作原理1、这个收集器是一个单线程工作的收集器 但是他的单线程的意义不仅仅是说明他只会使用一个收集线程完成收集工作,更重要的是强调在他进行垃圾收集是 必须暂停其他所有工作线程直到收集结束2、这项工作是由虚拟机在后台自动发起和自动完成的 用户在不可知 不可控的条件下吧用户正常工作线程全部停掉(这个确实很魔幻,你在敲着运行代码 忽然不动了 这时候是个Java编译者 肯定以为编辑环境坏了原创 2021-08-08 23:56:06 · 215 阅读 · 0 评论 -
JVM内存模型处理并发
JVM处理并发具有原子性可见性有序性这里写目录标题JVM处理并发具有原子性可见性有序性1、原子性(Atomictity)2、可见性synchronized同步块可见性 :final可见性是指:有序性1、原子性(Atomictity)基本数据类型访问读写都是原子性如果需要更大范围的原子性保证 Java内存模型提供了lock unlock 操作满足这种需求synchronized关键字 synchronized也具备原子性2、可见性可见性就是指当一个线程修改了共享变量时 其他线程 能够立即得知这个原创 2021-08-08 21:57:16 · 139 阅读 · 0 评论 -
Java线程调度 JVM-列8
Java线程调度这里写目录标题Java线程调度1、协同式缺点:线程执行时间不可控2、抢占式重点***不能让我们过于依赖线程优先级:所以我们不能在程序中通过优先级来完全哦按段一组状态都为Ready的线程先执行哪一个线程调度是指系统为线程分配处理器使用权的过程 调度方式主要有两种1、协同式线程的执行时间由线程本身控制 线程把自己的工作执行完 之后 主动通知系统切换到另一个线程上去协同式多线程的最大好处是实现了简单 线程要把自己的事情干完之后才会进行线程的切换切换线程操作对线程自己是可知的 所以原创 2021-08-07 14:56:44 · 227 阅读 · 0 评论 -
线程的实现(JVM以一个程序的角度)JVM-7
线程的实现(以一个程序的角度)线程是比进程更轻量级的调度执行单位 ,线程的引入 可以把一个进程的资源 分配和执行调度主流操作系统提供线程实现 Java提供了再不同硬件和操作系统平台对线程的操作 即 每一个已经调用的start()调用 还未结束的java.lang.Thread类的一个线程 Thread类大部分API都被声明为nativenative方法往往就意味着这个方法使用平台有关的手段来实现1、内核线程实现使用内核线程的实现方式被称为1:1实现 内核线程(KLT)就是由操作系统的内核支持原创 2021-08-07 12:29:06 · 68 阅读 · 0 评论 -
JVM内存模型的volatile和longdoule特殊规则
内存模型的volatile和longdoule特殊规则volatile类型特殊规则volatile可以说Java虚拟机提供的最轻量级额同步机制 并不被正确的理解第一个语义:第一保证了此变量对所有线程的可见性 是指当一条线程改变了该变量的值 新值对他其线程来说就是立即得知的第二个语义:禁止指令重排序 普通的变量只会保证该方法执行过程中所有的依赖赋值结果都能获取到正确的结果而不能保证变量赋值操作的顺序与程序代码的执行顺序的一致性安全一个变量被定义成 volatile之后 将具备两项特性:第一保证原创 2021-08-05 21:22:22 · 94 阅读 · 0 评论 -
JVM虚拟机内存模型
Java内存模型JVM并发处理的广泛应用是Amdahl定律代替摩尔定律 成为计算机性能发展动力的根本原因为什么要有高并发多线程是现代计算机操作系统中几乎已经是一项必备功能1、计算计算机运算能力清大2、运算速度与存储和子系统的速度差距太大3、大量的时间都花在磁盘I/O 网路络通信和数据库访问上如果不希望处理器大部分时间都处于等待其他资源的空闲状态 就必须使用一些手段去把处理器的运算能力压榨出来否则就会造成很大的性能浪费衡量一个服务性能高低好坏每秒事务处理数 是重要指标之一 计算量相原创 2021-08-05 20:39:12 · 131 阅读 · 0 评论 -
JVM垃圾收集原因、算法
JVM垃圾收集原因、算法垃圾收集Garbage Collection 简称GC为什么要垃圾收集和内存分配当需要派彩各种内存溢出 内存泄漏问题是当垃圾收成为系统达到更高并发量的平静时 我们必须堆这些自动化技术实施必要的监控和调节栈不需要太关注程序计数器、虚拟机栈、本地方法栈随线程而生 随线程灭每一个 当线程结束时 内存自然就跟着回收了而java heap和 方法区这两个区域有很显著的不确定性一个接口的多个实现类需要内存肯能会不一样 一个方法所执行的不统条件分支所需要的内存也可能不一样只有处于运原创 2021-08-02 11:57:51 · 127 阅读 · 0 评论 -
肯定能看懂的JVM-创建对象
JVM-创建对象内存Java面向对象 创建对象 在明面是 new 关键字而已第一步(遇见指令检查):java虚拟机遇到字符码new 指令时 首先将去检查这个指令的参数是否能在常量池中定位到一个类的引用第二步(类加载检查):并且检查这个符号引用代表的类是否已被加载解析和初始化过 如果没有就必须执行相应的类加载过程第三步(新生对象分配内存):对象所需的内存的大小在类加载完成后便可以完全确定 为对象分配空间实际上便等同与把一块顶的大小的内存块从Java堆中划分出来分配内存指针碰撞:、被使用过原创 2021-08-01 21:08:51 · 65 阅读 · 0 评论 -
不会吧!不会还不知道jvm组成吧!java内存区域与内存溢出异常-JVM组成
Java内存区域与内存溢出异常—JVM组成介绍写的这一章只是前奏JVM是C/C++写的(native)C++/C程序开发人员在内存管理领域 拥有最高的权限 拥有最高的权力却干着最底层的活 负担每一个对象生命的开始到结束维护责任·为什么要学内存管理Java虚拟机Java程序员把内存分配的权力给java虚拟机,如果不了解java虚拟机的怎么使用内存排查错误java 虚拟机图重点来了!!! 这些都是必须理解背会的程序计数器(篇幅太长了,我一条一条的列比较清晰)Program Counter原创 2021-08-01 13:00:07 · 112 阅读 · 0 评论 -
不会还不知道JVM的发展史吧?
JVM一、HotSpot虚拟机中含有两个即时编译器1 .C1 编译耗时短输出代码优化成都较低的但输出代码程度较低的客户端编译器2.C2编译耗时长输出代码优化程度也更高但输出代程度也高的客户端编译器Graal 编译器是C2的替代者 Sea-of-Nodes高级中间表示High IR形式C2->Graal 但是 Graal-X-C22.1Graal比C2更加复杂的优化 部分逃逸分析 激进预测性优化 支持预测性假设二、向Native迈进现阶段java缺点:不原创 2021-07-31 13:49:13 · 164 阅读 · 0 评论