JVM
文章平均质量分 91
大树~~
哦
展开
-
6、JVM-JVM调优工具与实战
JVM调优原创 2024-04-15 23:51:24 · 1111 阅读 · 0 评论 -
5、JVM-G1详解
间再怎么低也得有个限度。-XX:G1HeapWastePercent(默认5%): gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。原创 2024-04-14 23:04:13 · 910 阅读 · 0 评论 -
4、jvm-垃圾收集算法与垃圾收集器
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。原创 2024-04-13 22:50:04 · 991 阅读 · 0 评论 -
3、JVM对象的创建于内存分配原理
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可。而在JAVA中对象就是可以被进一步分解的聚合量。原创 2024-04-13 00:30:23 · 851 阅读 · 0 评论 -
2、JVM内存模型深度解析
根据 JVM 规范,JVM 内存共分为五个部分。JVM分为五大模块:和。原创 2024-04-12 00:11:29 · 1005 阅读 · 0 评论 -
1、JVM相关知识点-类加载机制
双薪委派机制,类加载机制原创 2024-04-10 00:29:07 · 842 阅读 · 0 评论 -
JUC-并发编程-04-synchronized原理及应用
1、基本使用Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:原子性:确保线程互斥的访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的“对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作,则将会清空工作内存中此变量的值,在执行引擎使用此变量前,需要重新从主内存中load操作或assign操作初始化变量值”来保证的; 有序性:有效解决重排序问题..原创 2020-06-11 18:25:57 · 330 阅读 · 0 评论 -
JUC-并发编程-02-java内存模型JMM
最近思考了一下,要学习并发编程,应该先把JMM的知识点熟悉,后面才好学习。话不多说步入正题。、1、概述:Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,本章将揭开Java内存模型神秘的面纱。本章大致分4部分:Java内存模型的基础,主要介绍内存模型相关的基本概念;Java内存模型中的顺序一致性,主要介绍重排序与顺序一致性内存模型;同步原语,主要介绍3个同步原语(synchronized、volatile和final)的内存语义及重排序规则在处理器中的实现;Java内存原创 2020-06-10 17:04:20 · 284 阅读 · 0 评论 -
JVM学习笔记-14-方法调用
方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作之一。1、解析承接前面关于方法调用的话题,所有方法调用的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这种解析能够成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。换句话说,调用目标在程序原创 2020-06-08 12:13:14 · 413 阅读 · 0 评论 -
JVM学习笔记-13-虚拟机字节码执行引擎
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。1、运行时栈帧结构Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(VirtualMachine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息,Class文件格式的方法表中能找到以上大多数概念的静态对照物。每一个方法从调用开始至执行结束的过程,都对应原创 2020-06-08 12:05:19 · 149 阅读 · 0 评论 -
JVM学习笔记-12-类加载器
Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。类加载器可以说是Java语言的一项创新,它是早期Java语言能够快速流行的重要原因之一。类加载器最初是为了满足Java Applet的需求而设计出来的,在今天用在浏览器上的Java Applet技术基本上已经被淘汰,但类加载器却在类层次划分、OSGi、程序热部署、代码原创 2020-06-01 09:42:53 · 129 阅读 · 0 评论 -
JVM学习笔记--10-虚拟机类加载机制
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。1、概述一章我们学习了Class文件存储格式的具体细节,在Class文件中描述的各类信息,最终都需要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚拟机后会发生什么变化,这些都是本章将要讲解的内容。Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的原创 2020-05-20 14:51:15 · 137 阅读 · 0 评论 -
JVM学习笔记--09-虚拟机执行子系统
1、类文件结构代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Java语言中的各种语法、关键字、常量变量和运算符号的语义最终都会由多条字节码指令组合来表达,这决定了字节码指令所能提供的语言描述能力必须比Java语言本身更加强大才行。因此,有一些Java语言本身无法有效支持的语言特性并不代表在字节码中也无法有效表达出来,这为其他程序语言实现一些有别于Java的语言特性提供了发挥空间。2、Class类文件的结构Java技术能够一直保持着非常良好的..原创 2020-05-12 09:27:15 · 204 阅读 · 0 评论 -
JVM学习笔记--07-经典垃圾收集器
上期我们学习了垃圾手机的几种算法。本期学习垃圾收集器。1、概论如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。经典的各款收集器之间的关系如下图:上图展示了七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用,图中收集器所处的区域,则表示它是属于新生代收集器抑或是老年代收集器。接下来笔者将逐一介绍这些收集器的目标、特性、原理和使用场景,并重点分析CMS和G1这两款相对复杂而又广泛使用的收集器,深入了解它们的部分运作细节。2、Serial收集器原创 2020-05-11 14:36:03 · 134 阅读 · 0 评论 -
JVM学习笔记--08-实战:内存分配与回收策略
Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。现在我们来探讨一下关于给对象分配内存的那些事儿。1、概述对象的内存分配,从概念上讲,应该都是在堆上分配(而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配[。在经典分代的设计下,新生对象通常会分配在新生代中,少数情况下(例如对象大小超过一定阈值)也可能会直接分配在老年代。对象分配的规则并不是固定的,《Java虚拟机规范》并未规定新对象的创建和存储细节,这取决于虚拟机当前使原创 2020-05-11 14:58:35 · 164 阅读 · 0 评论 -
JVM学习笔记--06-垃圾收集算法
本期学习垃圾收集算法。1、垃圾回收算法垃圾收集算法的实现涉及大量的程序细节,且各个平台的虚拟机操作内存的方法都有差异,在本节中我们暂不过多讨论算法实现,只重点介绍分代收集理论和几种算法思想及其发展过程。从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。由于引用计数式垃圾收集算法在本书讨论到的主流Java虚拟机中均未涉及,所以原创 2020-05-08 18:14:00 · 183 阅读 · 0 评论 -
JVM学习笔记--05垃圾收集器与内存分配策略与四种引用
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。1、概述说起垃圾收集(Garbage Collection,简称GC),有不少把这项技术当作java语言的伴生产物。事实上,垃圾收集器的历史远远比java久远,当Lisp还在胚胎时期时,其作者JohnMcCarthy就思考过垃圾收集需要完成的三件事情:·哪些内存需要回收? 什么时...原创 2020-04-29 22:53:34 · 140 阅读 · 0 评论 -
JVM学习笔记--04实战:OutOfMemoryError异常
上篇学习到虚拟机如何对象的概念,其中提到基础OutOfMemoryError异常,本篇具体学习下。在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能,本篇将通过若干实例来验证异常实际发生的代码场景,并且将初步介绍若干最基本的与自动内存管理子系统相关的HotSpot虚拟机参数。本篇实战的目的有两...原创 2020-04-29 20:40:17 · 248 阅读 · 0 评论 -
JVM系统学习-02-HotSpot虚拟机对象探秘
上一篇学习了java虚拟机的运行时数据区域之后,我们大致明白了java虚拟机内存模型的概况。那我们要继续了解这些虚拟机中数据的其他细节,譬如他们是如何创建、如何布局、如何访问的。本篇来学习一下Hotspot虚拟机在java堆中对象分配、布局和访问的全过程。1、对象的创建java是一门面向对象的编程语言,java的程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例外:复制与...原创 2020-04-13 11:50:01 · 181 阅读 · 0 评论 -
JVM系统学习-01-JVM内存区域概述
本篇是JVM的开篇第一章,我们知道java程序员离不开JVM,因为在JVM的自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存的一切都很美好。不过,也正是因为java程序员把控制内存的权力交给了java虚拟机,一旦出现内存泄漏和溢出的情况,如果你不了解原理,那么排查起来是一件很麻烦的工作。本篇学习就...原创 2020-04-13 11:09:25 · 133 阅读 · 0 评论