java-JVM
文章平均质量分 92
jvm
吹老师个人app编程教学
好好学习,天天向上。
展开
-
JVM_垃圾收集器详解
本章主要讲了JVM中垃圾收集器的发展,从单线程到多线程,再到GC线程和用户线程并发收集的垃圾收集器。如何选择垃圾收集器:优先调整堆的大小让服务器自己来选择如果内存小于100M,使用串行收集器如果是单核,并且没有停顿时间的要求,串行或JVM自己选择如果允许停顿时间超过1秒,选择并行或者JVM自己选如果响应时间最重要,并且不能超过1秒,使用并发收集器4G以下可以用parallel,4-8G可以用ParNew+CMS,8G以上可以用G1,几百G以上用ZGC。原创 2023-03-25 12:03:30 · 479 阅读 · 0 评论 -
jvm_根节点枚举&安全点&安全区域
根节点枚举从根节点开始遍历对象图前文我们在介绍垃圾收集算法的时候,简单提到过:标记-整理算法(Mark-Compact)中的移动存活对象操作是一种极为负重的操作,必须全程暂停用户应用程序才能进行,像这样的停顿被最初的虚拟机设计者形象地描述为 “Stop The World (STW)”。显然 STW 并不是一件好事,能够避免那就需要尽可能避免。原创 2023-03-25 11:07:14 · 706 阅读 · 1 评论 -
jvm_垃圾回收&对象的finalization机制详解
Java语言提供了对象终止(finalization)机制来允许开发人员提供对象被销毁之前的自定义处理逻辑。当垃圾回收器发现没有引用指向一个对象,即:垃圾回收此对象之前,总会先调用这个对象的finalize()方法。finalize()方法允许在子类中被重写,用于在对象被回收时进行资源释放。通常在这个方法中进行一些资源释放和清理的工作,比如关闭文件、套接字和数据库连接等。原创 2023-03-25 10:09:51 · 700 阅读 · 0 评论 -
jvm_多态实现原理、虚方法表、虚方法、静态解析、动态链接详解
最近在学JVM,但学的很痛苦,因为JVM的知识点都不连贯,而且也没找到什么资料,也很难进行验证。如标题,在学习的过程中遇到了这些概念,刚开始很难理解,后来不停找资料、看视频、看书,算是得出了一些个人总结,不一定完全准确,希望对大家有个借鉴。下面的讲解,需要大家提前对JVM有一部分了解,比如类加载、JVM内存模型等、字节码文件等知识,会按照源代码,然后编译成字节码文件,然后字节码文件被加载进虚拟机内存的顺序讲起。原创 2023-03-24 09:44:18 · 1220 阅读 · 2 评论 -
JVM_栈详解二
即只有当前正在执行的方法的栈帧(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧(Current Frame),与当前栈帧相对应的方法就是当前方法(Current Method),定义这个方法的类就是当前类(Current Class)。Java7中增加的动态语言类型支持的本质是对Java虚拟机规范的修改,而不是对Java语言规则的修改,这一块相对来讲比较复杂,增加了虚拟机中的方法调用,最直接的受益者就是运行在Java平台的动态语言的编译器。当方法调用结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。原创 2023-03-21 06:51:49 · 227 阅读 · 0 评论 -
JVM_垃圾收集之三色标记算法详解
在可达性分析中,CMS、G1、ZGC都采用三色标记算法,该算法会出现错标和漏标的问题,该怎么解决呢?还有写屏障、读屏障、以及原始快照和增量更新,这些都是面试中常问的问题,本文将详细概述。原创 2023-03-20 00:26:39 · 298 阅读 · 1 评论 -
jvm_题库详解
JVM内存区域总共分为两种类型线程私有区域:程序计数器、本地方法栈和虚拟机栈线程共享区域:堆(heap)和方法区特征线程私有区域:依赖用户的线程创建而创建、销毁而销毁,因用户每次访问都会独立开启一个线程,跟本地的线程相对应(用白话文讲就是同生共死或朝生夕死);线程共享区域:它是随着虚拟机的开启而创建,关闭而销毁;名词解释程序计数器用户每次访问都会独立开启一个线程,程序计数器会记录每次当前执行代码的行号指示器本地方法栈。原创 2023-03-19 19:29:19 · 465 阅读 · 0 评论 -
JVM_堆详解
如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到survivor空间中,并将对象年龄设为1。对象在survivor区中每熬过一次MinorGC,年龄就增加1岁,当它的年龄增加到一定程度(默认为15岁,其实每个JVM、每个GC都有所不同)时,就会被晋升到老年代对象晋升老年代的年龄阈值,可以通过选项-XX:MaxTenuringThreshold来设置针对不同年龄段的对象分配原则如下所示:● 优先分配到Eden。原创 2022-10-07 12:58:38 · 234 阅读 · 0 评论 -
JVM_程序计数器详解
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。原创 2022-10-07 11:41:13 · 1119 阅读 · 0 评论 -
JVM_栈详解一
注意事项:不同线程中所包含的栈帧是不允许存在相互引用的,即不可能在一个栈帧之中引用另外一个线程的栈帧如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,接着,虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。使用索引表来代替查找。方法嵌套调用的次数由栈的大小决定。Java7中增加的动态语言类型支持的本质是对Java虚拟机规范的修改,而不是对Java语言规则的修改,这一块相对来讲比较复杂,增加了虚拟机中的方法调用,最直接的受益者就是运行在Java平台的动态语言的编译器。原创 2022-10-07 11:31:33 · 1592 阅读 · 0 评论 -
JVM_类文件结构详解
开始之前我们需要先了解一些基本的概念,这些概念是学习整个 JVM 原理的基础。1)JVM 虚拟机规范主要规范了 Class 文件结构,虚拟机内存结构,虚拟机加载,解析,执行 Class 文件的行为方式,以及一系列的字节码指令集。2)Class 文件理论上说是一种数据结构,该数据结构有着严格的格式规范,该规范在字节粒度上规定了组成该数据结构的格式标准。原创 2022-10-07 08:13:35 · 509 阅读 · 0 评论 -
JVM-线程安全与锁优化
jvm-线程安全与锁优化原创 2022-10-03 17:01:49 · 377 阅读 · 0 评论 -
jvm_后端编译与优化详解
后端编译器原创 2022-09-25 16:53:45 · 1244 阅读 · 0 评论 -
JVM-前端编译与优化
jvm-前端编译器原创 2022-09-05 07:22:28 · 328 阅读 · 0 评论 -
JVM_总结详解
1、CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】有篇很棒的文章,从cpu讲到内存模型:什么是java内存模型?在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。...原创 2022-04-17 09:22:47 · 646 阅读 · 0 评论