当前位置: 首页 > news >正文

java中gc的认识,java JVM GC 笔记(个人对GC 或JVM 的了解)

JVM 是在操作系统上的一个平台,与操作系统间有个装换器,将字节码文件转换成对应平台的机器码,字节码文件从编译器编译.java文件产生。

JVM的结构 栈(存放的就是方法的引用,局部变量,方法体)、堆(常量,方法的实例)、方法区(常量池、静态方法区)、程序计数器、本地方方法栈(不受虚拟机限制的本地方法栈区)

有一张图挺详细的

f55d4a3f8e54c47a60337216cd6be003.png

https://blog.csdn.net/Marvel__Dead/article/details/69220153?locationNum=5&fps=1

用户编写的java文件通过jvm的类加载器加载进内存

编译优化的技术

方法内联,去除方法调用成本,

冗余访问消除

复写传播

无用代码消除

公共子表达式消除,没必要重复计算公共子表达式的值

数组边界检查消除

逃逸分析,分析对象的动态作用域,一个对象定以后,被外部方法调用,称为方法逃逸,被其他线程访问到,称为线程逃逸 栈上分配 同步消除 标量替换

类加载器:

bootstrap(根类加载器)加载JVM自身类

extension(扩展类加载器)加载lib下的jar包

system(系统类加载器)加载用户编写的java文件

JVM加载类是按需加载 使用双亲委派模式

双亲委派模式:

当某个类加载器收到类加载的请求时不会自己直接加载 而是先去找父类加载器 当父类加载器还有父类时一直向上请求 直到根节点根类加载器;然后向下返回 当父类加载器能加载时 成功返回,不能加载就交由子类尝试加载

类加载机制 : 加载 验证 准备 解析 初始化 运行 狗带

GC

JVMGC

GC主要发生在堆内存中 现在采用为分代回收

判断对象是否是要回收的对象有可达性分析 和引用计数等

引用计数:新增一个引用计数+1 引用被释放计数-1当计数为0则代表对象可回收 (此方法过时)

可达性分析:从GC Root开始 当一个对象和GC Root没有间接或者直接的引用链时(么有直接或者间接的引用关系) 该对象不可用

GC Root包括:1、虚拟机栈中引用的对象。2、方法区中类静态属性实体引用的对象。3、方法区中常量引用的对象。4、 本地方法栈中JNI引用的对象。

分代回收:JVM中分为3个大区 年轻代 老年代 永久代(堆外内存)而大区中又有小区 所有的新生对象都是放在年轻代中 当区块中满了时会将还存存活的对象(没有被GC掉的)移到下个区块


http://www.taodudu.cc/news/show-647731.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • java libpcap,Linux下编译安装libpcap
  • 网页实现人脸识别PHP,奇思妙想-用HTML5进行人脸识别
  • 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含
  • php对应哪个oracle版本,Oracle 版本说明
  • php 主页子标题修改,关于有部分用户默认PC主页大标题标签修改无效的答疑.
  • 基于matlab的智能天线波束方向图仿真,基于MATLAB的智能天线波束方向图仿真
  • python中xlwt的局限,Python xlwt 生成Excel和设置特定单元格不可编辑
  • angularjs 导出excel php,AngularJS 导出Excel指令
  • php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...
  • oracle10g数据库热备份,Oracle10g数据库冷备份脚本文件
  • Oracle创建序列的sql语句,【Oracle学习】之 序列(Sequence)
  • cssd拉起oracle,oracle rac /etc/init.d/init.cssd startcheck
  • oracle dg状态查询,oracle dg状态检查及相关命令
  • keep alive PHP,vue中keep-alive使用方法详解
  • oracle库缓存锁,Laravel 7.10 中的数据库缓存锁定和并发限制
  • 源码时代php中级项目,PHP学科项目评比圆满结束
  • linux 进程管理 ppt,linux操作系统-进程管理和打印管理.ppt
  • linux c编程头文件,如何在Linux中找到C编程语言的头文件?
  • linux 脚本中除法运算符,Linux中Shell的算数运算符和位运算符用法笔记
  • linux程序获取透传参数,Linux内核中TCP SACK处理流程分析
  • Linux线程时间片如何修改,请教如何修改线程时间片
  • 安卓虚拟linux系统教程,在Linux上模拟Android应用程序的3种方法 | MOS86
  • linux中断程序快捷键,linux命令行快捷键
  • linux用户命令权限管理,Linux命令-用户、权限管理
  • linux缓存文件地址,如何遍历linux内核中的文件地址空间的页面缓存树(基数树)
  • 成绩排序的c语言算法,成绩排序系统(练习排序算法和复习C语言)
  • c语言规定 函数返回值6,C语言六函数.ppt
  • 在qt中用c语言数组,在QT函数中返回一个数组/把一个数组传参给函数
  • java5年转c语言,时隔5年,C语言再次领先Java,荣登编程语言排行榜第一!
  • c语言查找功能的怎么使用方法,求C语言实现查询功能(如果选择3,如何实现查询)...