JVM
你走吧起风了__
孤独本是常态,逢人何必言深。
展开
-
JVM参数-XX:+PrintGCDetails
连我 **“-XX:+PrintGCDetails”**参数都要过时了吗?(手动狗头)原创 2021-06-15 15:11:49 · 368 阅读 · 2 评论 -
JVM学习路线方式推荐
个人JVM学习路线就是:1.网课尚硅谷宋红康--->康师傅操刀的JVM解析。强烈推荐!强烈推荐!强烈推荐!没什么好多说的,个人认为全网质量最高,讲解最为清楚,最为风趣幽默的课程!个人今日学完,收获极大!B站就有。链接在此:www.bilibili.com/video/BV1PJ411n7xZ2.实体书。周志明的《深入理解JVM》,国内公认的JVM抗鼎之作。无需多言。本人还在继续学习中。学无止境,延迟满足。...原创 2021-04-29 19:51:35 · 208 阅读 · 0 评论 -
JVM之垃圾回收器详解(二)
7. G1回收器—区域化分代式7.1 既然我们已经有了前面几个强大的GC,为什么还要发布Garbage First(G1)? 原因就在于应用程序所应对的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序正常进行,而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。G1(Garbage-First)垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器,是当今收集器技术发展的最前沿成果之一。 与此同时,为了适应现在不断扩大的内存和不断增原创 2020-12-29 12:29:27 · 150 阅读 · 0 评论 -
JVM之垃圾回收器详解(一)
垃圾回收器1. GC分类与性能指标1.1 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 怎么学习Java不同版本新特性? 语法层面:Lambda表达式、switch、自动拆箱装箱、enum。 API层面:Stream API、新的日期时间、Optional、St.原创 2020-12-24 15:51:35 · 208 阅读 · 0 评论 -
JVM之垃圾回收相关算法(详解)
垃圾回收相关算法在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。 那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。 判断对象存活一般有两种方式:引用计数算法和可达性分析算法。1. 标记阶段—引用计数算法引用计数算...原创 2020-12-15 19:14:55 · 181 阅读 · 0 评论 -
JVM之对象实例化、内存布局与访问定位
对象实例化、内存布局与访问定位对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头里有什么?1. 对象实例化从对象创建的方式和创建对象的步骤开始说:1.1 创建对象的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法。 Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器。 Constructor的newInstance(XXX):反射的方式,可..原创 2020-12-07 17:23:54 · 84 阅读 · 0 评论 -
JVM之深入理解方法区
这次所讲述的是运行时数据区的最后一个部分–方法区从线程共享与否的角度来看:1. 栈、堆、方法区的交互关系面就涉及了对象的访问定位:Person:存放在元空间,也可以说方法区。 person:存放在Java栈的局部变量表中。 new Person():存放在Java堆中。2. 方法区的基本理解2.1 方法区在哪里呢?《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩...原创 2020-12-02 15:13:25 · 156 阅读 · 0 评论 -
JVM之深入理解程序计数器
JVM-程序计数器 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 它是一块很小的内存空间,几乎可以忽略不记。...原创 2020-11-27 17:47:16 · 395 阅读 · 0 评论 -
JVM之深入理解虚拟机栈(二)
4. 栈帧的内部结构每个栈帧中存储着:局部变量表(Local Variables) 操作数栈(Operand Stack)(或表达式栈),虚拟机栈--栈帧--操作数栈; 动态链接(Dynamic Linking)(或指向运行时常量池的方法引用) 方法返回地址(Return Address)(或方法正常退出或者异常退出的定义) 一些附加信息并行每个线程下的栈都是私有的,因此每个线程都有自己各自的栈,并且每个栈里面都有很多栈帧,栈帧的大小主要由 局部变量表 和 操作数栈决定的。原创 2020-11-23 17:32:29 · 98 阅读 · 0 评论 -
JVM之深入理解虚拟机栈(一)
JVM虚拟机栈1. 虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现; 缺点是性能下降,实现同样的功能需要更多的指令。 有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么? ☆栈是运行时的单位,而堆是存储的单位☆ 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。原创 2020-11-20 20:04:04 · 176 阅读 · 0 评论 -
JVM之深入理解堆空间(二)
6. Minor GC,MajorGC、Full GC我们都知道,JVM的调优的一个环节,也就是垃圾收集,我们需要尽量的避免垃圾回收,因为在垃圾回收的过程中,容易出现STW的问题。而 Major GC 和 Full GC出现STW的时间,是Minor GC的10倍以上JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。针对Hotspot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(FullGC)原创 2020-11-19 18:51:27 · 216 阅读 · 0 评论 -
JVM之深入理解堆空间(一)
JVM之深入理解堆1. 堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。...原创 2020-11-18 19:14:23 · 203 阅读 · 0 评论 -
Java字节码指令大全
小伙伴们大家好呀,最近文章主要都在写Redis相关的文章,没有写别的相关知识,今天来写一篇。希望对你有所帮助。如题所示------》字节码相关指令。字节码指令算是比较底层的知识了,它依托与JVM,由JVM进行加载与执行。我认为一个好的Java开发工程师,不应该只会写java代码,也应该对字节码运行原理有所了解与掌握,这样更有利于我们实力和技术的提升。另一方面,我们在编写代码的过程中有一些编码错误与陷阱是不容易的发现的,但如果我们深入到字节码程度就会对问题所在一目了然。废话不多说,上正文。最原创 2020-11-17 20:00:47 · 275 阅读 · 0 评论 -
Java中双亲委派机制的一点理解
什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。类加载器的类别BootstrapClassLoader(启动类加载器)c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作ExtClassLoader (标准扩展类原创 2020-07-08 11:31:04 · 260 阅读 · 1 评论 -
JVM中虚拟机栈的一点理解
最近在学习JVM,后面便连更jvm的相关篇章,一来记录学习过程,二来巩固加深理解。一、虚拟机执行引擎虚拟机执行引擎是java虚拟机核心组成部分之一。虚拟机是相对于物理机的概念,他们都有代码执行能力,区别在于物理机执行引擎直接建立在处理器、硬件指令集、操作系统层面,而虚拟机的执行引擎是由自己实现,用于执行虚拟机字节码指令集。执行引擎执行java代码的时候可能有解释执行(通过解释器执行)和编译执行(通过执行编译器产生本地代码执行)两种方式,所有的java虚拟机执行引擎都是一致的,输入的是字节码文件,处理过原创 2020-07-09 13:16:22 · 257 阅读 · 1 评论 -
Java中的逃逸分析&标量替换&栈上分配
Java_JVM_逃逸分析技术_栈上分配_标量替换什么是逃逸分析(Escape Analysis)?在编程语言的编译优化原理中,分析指针动态范围的方法称之为逃逸分析。它跟静态代码分析技术中的指针分析和外形分析类似。通俗一点讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。而用来分析这种逃逸现象的方法,就称之为逃逸分析。在这个例子中,一共举了3种常见的指针逃逸场景。分别是 全局变量赋值,方法返回值,实例引用传递。逃逸分析优化JVM原理**我们知道java对象是在堆里分配的原创 2020-07-13 15:58:00 · 336 阅读 · 0 评论 -
Java中四种引用类型详解
在Java编程中,我们经常用到的是大量的引用,但是我们并不注重引用的类型,在java编程中所用到的引用99%都是强引用类型,但还有还有其他三种引用类型我们虽然不常用,但是我们也应该有所了解。每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。//**创建一个引用,引用可以独立存在,并不一定需要与一个对象关联**String s;通过转载 2020-07-21 11:41:56 · 183 阅读 · 1 评论 -
java内存模型JMM理解整理
什么是JMM?JMM即为JAVA 内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。从抽象的角度来看,JMM定义了线程和主内存之间原创 2020-07-26 17:36:55 · 150 阅读 · 0 评论