首页 > 其他分享 >4. JVM

4. JVM

时间:2023-02-16 10:13:20浏览次数:45  
标签:收集器 标记 算法 线程 内存 JVM 加载

JVM的内存区域,即运行时数据区域。

线程私有的:
程序计数器
虚拟机栈
本地方法栈

线程共享的:

方法区
直接内存

Java内存模型(JMM),Happens-Before 规则。

JVM 内存结构和 Java 虚拟机的运行时区域相关,定义了 JVM 在运行时如何分区存储程序数据,就比如说堆主要用于存放对象实例。
Java 内存模型和 Java 的并发编程相关,抽象了线程和主内存之间的关系就比如说线程之间的共享变量必须存储在主内存中,规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的
在分布式环境中,通过一系列规则来定义逻辑时钟的变化,从而能通过逻辑时钟来对分布式系统中的事件的先后顺序进行判断。逻辑时钟并不度量时间本身,仅区分事件发生的前后顺序,其本质就是定义了一种 happens-before 关系

垃圾回收算法;垃圾收集器,面试重点问CMS和G1的原理。

标记-清除算法
标记-复制算法
标记-整理算法
分代收集算法

Serial 收集器
ParNew 收集器
Parallel Scavenge 收集器
Serial Old 收集器
Parallel Old 收集器
CMS 收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用。
CMS(Concurrent Mark Sweep)收集器是 HotSpot 虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作
CMS 收集器是一种 “标记-清除”算法实现的
从它的名字就可以看出它是一款优秀的垃圾收集器,主要优点:并发收集、低停顿。但是它有下面三个明显的缺点:
对 CPU 资源敏感;
无法处理浮动垃圾;
它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生
G1 收集器
G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足 GC 停顿时间要求的同时,还具备高吞吐量性能特征.
G1 收集器的运作大致分为以下几个步骤:
初始标记
并发标记
最终标记
筛选回收
G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的 Region(这也就是它的名字的由来)
ZGC 收集器
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:
停顿时间不超过10ms;
停顿时间不会随着堆的大小,或者活跃对象的大小而增加;
支持8MB~4TB级别的堆(未来支持16TB)。
从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收

类加载,双亲委派模型,如何打破双亲委派模型。

系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析
每一个类都有一个对应它的类加载器。系统中的 ClassLoader 在协同工作的时候会默认使用 双亲委派模型 。即在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。加载的时候,首先会把该请求委派给父类加载器的 loadClass() 处理,因此所有的请求最终都应该传送到顶层的启动类加载器 BootstrapClassLoader 中。当父类加载器无法处理时,才由自己来处理。当父类加载器为 null 时,会使用启动类加载器 BootstrapClassLoader 作为父类加载器
jvm 调优,如何排查线上问题,如何解决线上 gc 问题。

标签:收集器,标记,算法,线程,内存,JVM,加载
From: https://www.cnblogs.com/song-hua/p/17125725.html

相关文章

  • 面试必问:JVM 如何确定死亡对象?
    在JVM中,有两个非常重要的知识点,一个是JVM的内存布局(JVM运行时的数据区域),另一个就是垃圾回收。而垃圾回收中又有两个重要的知识点,一个是如何确定JVM中的垃圾对象,另一......
  • 常用的jvm调优的参数
    -Xms2g:初始化推大小为2g;-Xmx2g:堆最大内存为2g;-XX:NewRatio=4:设置年轻的和老年代的内存比例为1:4;-XX:SurvivorRatio=8:设置新生代Eden和Survivor比例为8:2;–XX:......
  • 【技术剖析】7. 看看毕昇 JDK 团队是如何解决 JVM 中 CMS 的 Crash
    【技术剖析】7.看看毕昇JDK团队是如何解决JVM中CMS的Crashhttps://bbs.huaweicloud.com/forum/thread-168485-1-1.html JDKJVM发表于2021-11-1016:24:5......
  • JVM运行时内存区
    JVM运行时内存区是如何划分的?方法区(MethodArea):存储类的字节码信息、常量池堆区(Heap Area):存储对象Java方法栈(StackArea):所有方法运行时,会创建一个栈帧对象,然后进入栈(......
  • 学习笔记分享:java面试(JDK、JRE、JVM的区别)
    简答题、问答题:1.JDK、JRE、JVM的区别:1)JDK:java开发工具包,是java的核心,包括:JRE+编译、运行等命令工具2)JRE:java运行环境,是运行java程序所必须的环境集合,包括:JVM+......
  • Timed out waiting for signal from JVM. .
    SymptomsSeeingthefollowingerrorsinthewrapper.logfile.JVMappearshung:TimedoutwaitingforsignalfromJVM.ERROR|wrapper|2009/02/2303:39:39|JV......
  • jvm优化base java GC垃圾回收
    OutOfMemoryError错误Java堆内存的OutOfMemoryError异常是实际应用中常见的内存溢出异常情况。当出现Java堆内存溢出时,异常堆栈信息“java.lang.OutOfMemoryError”会跟着......
  • JVM中类加载子系统
    1、类加载子系统中有哪些常用类加载器?1、BootStrapClassLoader(负责加载基础类库中的类,例如Object,String....)2、ExtClassLoader(负责加载扩展类库中的类ext/...)3、AppCla......
  • JVM的体系结构
    1、JVM是什么?是一种虚拟机规范2、为什么要学习JVM?(Oracle的HotSpot)为了更好的理解JAVA,为了更好的解决线上问题(软件在线升级、防内存泄漏、提高吞吐量)3、JVM的构成有哪几......
  • 为什么这11道JVM面试题这么重要(附答案)
    本文内容整理自博学谷狂野架构师运行时数据区都包含什么虚拟机的基础面试题程序计数器Java虚拟机栈本地方法栈Java堆方法区程序计数器程序计数器是线程......