JVM
文章平均质量分 94
败给你的黑色幽默丶
if i say you're the one would you believe me;
if i ask you to stay would you show me the way
展开
-
【JVM】【第 17 章】【 垃圾回收器】
垃圾回收器1、GC 分类与性能指标1.1、垃圾回收器概述与分类1.2、评估 GC 的性能指标评估 GC 的性能指标:吞吐量(throughput)评估 GC 的性能指标:暂停时间(pause time)对比2、不同的垃圾回收器概述2.1、垃圾收集器发展史2.2、回收器与垃圾分代之间的关系2.3、查看默认垃圾收集器3、Serial 回收器:串行回收器4、ParNew 回收器:并行回收5、Parallel 回收器:吞吐量优先6、CMS 回收器:低延迟CMS 特点和弊端6.5、CMS 参数配置CMS 小结7. G原创 2022-02-12 20:54:36 · 1191 阅读 · 0 评论 -
第 16 章 垃圾回收相关零散知识
垃圾回收相关零散知识1、System.gc() 的理解1.1、System.gc() 方法1.2、手动GC理解不可达对象的回收行为2. 内存溢出与内存泄漏2.1 内存溢出2.2 内存泄漏3. Stop the World4、垃圾回收的并行与并发4.1、并发的概念4.2、并行的概念4.3、垃圾回收的并行与串行5、安全点与安全区域5.1 安全点5.2 安全区域6、再谈引用6.0 四种引用类型概述6.1 强引用6.2 软引用6.3 弱引用6.4 虚引用6.5 终结器引用1、System.gc() 的理解1原创 2022-02-11 20:07:57 · 587 阅读 · 0 评论 -
【JVM】【第十五章】垃圾回收相关算法
垃圾回收相关算法1. 垃圾回收的3个阶段2. 标记阶段 - 对象存活判断2.1 引用计数法 (java没有采用)2.2 可达性分析算法哪些是GC Roots?可达性分析算法的注意事项3. 对象终止阶段-对象的 finalization 机制3.1 finalize() 方法机制3.2 finalize() 方法使用的注意事项3.3 对象是否"死亡"3.4 判断对象是否可回收的两次标记过程3.5 代码测试对象可复活4.使用(MAT与JProfiler)工具分析GCRoots5.垃圾清除阶段5.1 标记-清除算原创 2022-02-09 21:08:48 · 698 阅读 · 0 评论 -
【JVM】【第十四章】垃圾回收概述
关于垃圾收集垃圾收集就是GCJava 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题(1)哪些内存需要回收?(2)什么时候回收?(3)如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断原创 2021-12-31 11:49:48 · 235 阅读 · 0 评论 -
【JVM】【第十章】 StringTable
1.String的基本特性String:字符串,使用一对""引起来表示。1.1String的两种创建方式String sl = "hello"; //字面量的定义方式;String s2 = new String("hello"); //new对象的方式通过字面量的方式(不同于new)给一个String变量赋值,此时的字符串值声明在字符串常量池中。1.2 String类的特点String类是final的,不可被继承String实现了Serializable接口,支持序列化实现了C原创 2021-12-30 18:24:32 · 1058 阅读 · 0 评论 -
原创 【JVM】【第九章】执行引擎
JVM核心组成部分回顾1.类加载器子系统2.运行时数据区3.执行引擎执行引擎概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器虚拟机和物理机的区别物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上。虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约来定制指令集和执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的任务1.将字节码指令翻译成机器语言加载字节码文件到虚拟机内存,字节码指令并非等价于本地机器的原创 2021-12-22 18:29:11 · 1231 阅读 · 0 评论 -
【JVM】【第八章】【对象专题】对象创建、内存分布、访问定位、直接内存
大纲1.创建对象的几种方式① new应用场景:普通的new;单例模式中通过类的静态方法来获得实例;工厂模式;② Class对象的newInstance()方法 反射在JDK9里面被标记为过时的方法此方式只能调用无参构造器,而且构造器的权限要求必须是public③ Constructor的newInstance(XXX)方法 反射此方式可以调用无参、含参构造器,且对构造器权限没有要求④ 使用clone()不用任何构造器,只需要类实现Clo.原创 2021-12-20 09:41:11 · 1389 阅读 · 2 评论 -
【JVM】【第七章】【JVM 运行时数据区】方法区
方法区1.栈、堆、方法区的交互关系1.1 异常和GC区域总结1.2 从创建对象的角度观察运行时数据区的分工2.方法区2.1 方法区的位置2.2 方法区的理解2.3 方法区存储的信息1.类信息1.1 类的声明信息1.2 类的域信息(成员变量)1.3 方法信息1.4 方法区查看示例2.Non-final类变量和final类变量3.运行时常量池运行时常量池 Vs 常量池常量池运行时常量池2.4 方法区使用举例关于【符号引用 --> 直接引用】的理解2.5方法区的演进(☆☆☆)永久代为什么要被元空间替代?JV原创 2021-12-04 18:48:20 · 455 阅读 · 0 评论 -
【JVM】【第六章】【JVM 运行时数据区】【堆】【05】堆空间分代思想
1.为什么要把Java堆分代?为什么要把Java堆分代?不分代就不能正常工作了吗?经研究,不同对象的生命周期不同。70%-99%的对象是临时对象。新生代:有Eden、两块大小相同的survivor(又称为from/to,s0/s1)构成,to总为空。老年代:存放新生代中经历多次GC仍然存活的对象。其实不分代完全可以,分代的唯一理由就是优化GC性能; 如果没有分代,那所有的对象都在一块,就如同把.原创 2021-12-01 11:22:08 · 392 阅读 · 0 评论 -
【JVM】【第六章】【JVM 运行时数据区】【堆】【04】堆分代垃圾回收
我们都知道,JVM的调优的一个环节,也就是垃圾收集,我们需要尽量的避免垃圾回收,因为在垃圾回收的过程中,容易出现STW(Stop the World)的问题,而 Major GC 和 Full GC出现STW的时间,是Minor GC的10倍以上JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。针对Hotspot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)而JVM调优是为了让GC.原创 2021-11-26 14:28:33 · 81 阅读 · 0 评论 -
【JVM】【第六章】【JVM 运行时数据区】【堆】【02】对象分配过程
对象分配过程1.对象分配难点2.图解对象分配过程3.额外补充4.对象分配的特殊情况5.代码演示对象分配过程1.对象分配难点为新对象分配内存是一件非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还需要考虑GC执行完内存回收后是否会在内存空间中产生内存碎片。2.图解对象分配过程起初创建对象,对象都分配在Eden区,此区有大小限制。当Eden区满了,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行原创 2021-11-26 01:46:17 · 451 阅读 · 0 评论 -
【JVM】【第六章】【JVM 运行时数据区】【堆】【01】堆内存的设置
1、堆的核心概述1.1 认识堆内存1.1.1 堆与进程一个java程序运行起来对应一个JVM进程一个JVM进程对应一个JVM实例,一个JVM实例中只有一个运行时数据区;一个运行时数据区只有一个方法区和堆,而一个进程中有多个线程,这就意味着一个进程中的多个线程就要共享方法区和堆;每个线程独享程序计数器、本地方发展、虚拟机栈1.1.2 对堆的认识一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,JVM启动后其空间大小.原创 2021-11-26 00:17:44 · 910 阅读 · 0 评论 -
【JVM】【第五章】【JVM 运行时数据区】本地方法栈
前言JVM内存结构本地方法栈在JVM内存结构的位置如图所示1.本地方法官方定义“A native method is a Java method whose implementation is provided by non-java code.”(本地方法是一个非Java的方法,它的具体实现是非Java代码的实现)简单地讲,一个Native Method是一个Java调用非Java代码的接囗一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,原创 2021-11-25 10:37:29 · 124 阅读 · 0 评论 -
【JVM】【第四章】【JVM 运行时数据区】虚拟机栈
1.虚拟机栈的背景为什么jvm指令的执行都是基于栈结构?为了实现跨平台特性,基于寄存器的因为不同平台CPU架构不同从而无法实现跨平台特性,基于栈可实现跨平台。基于栈结构设计指令执行引擎的优缺点?优点是跨平台,指令集小,编译器容易实现缺点是性能下降,实现同样的功能需要更多的指令。2.内存中的堆与栈如何理解栈是运行时的单位,而堆是存储的单位?栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。虚拟机栈(1)什么是虚拟机栈ja.原创 2021-11-21 03:40:21 · 284 阅读 · 0 评论 -
【JVM】【第三章】【JVM 运行时数据区】 程序计数器
1.程序计数器介绍JVM运行时数据区的第一块内容1.JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。2.它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的.原创 2021-11-18 15:24:31 · 251 阅读 · 0 评论 -
【JVM】【第二章】 运行时数据区概述 & 线程
运行时数据区概述&线程1. JVM架构图2. 运行时数据区结构2.1运行时数据区与内存内存运行时数据区的完整图2.2 JavaAPI中的Runtime类3. Java线程1. JVM架构图本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。好比大厨做饭:切好的菜,刀,原创 2021-11-17 10:18:35 · 234 阅读 · 0 评论 -
【JVM】【第一章】类加载子系统
JVM架构图Java源代码–>编译–>class文件—>类加载子系统—>运行时数据区—>执行引擎本文内容对应JVM架构图中Class Loader System类加载器子系统1.类加载子系统的三个阶段加载阶段链接阶段:验证->准备->解析初始化阶段2.类加载子系统的任务负责加载.class文件,加载的类信息存放在方法区中;除了类信息,方法区还会存放运行时常量池信息,还包括字符串常量和数字常量,这部分常量信息是.class文件中常量池原创 2021-11-16 20:30:20 · 421 阅读 · 0 评论