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

03-JVM-对象内存、执行引擎

一、创建对象的方式

  1. new、Xxx的静态方法、XXXBuilder/XXXFactory的静态方法
  2. Class的newInstance,只能调用空参构造器,权限必须是public
  3. Construct的newInstance,可以调用空参、带参的构造器,权限无要求
  4. Clone(),不调用构造器,但需要实现Cloneable接口,实现clone,默认浅拷贝
  5. 使用反序列化

二、创建对象的过程

  1. 判断对象对应类是否加载、链接、初始化
  2. 为对象分配内存(指针碰撞、空闲列表)
  3. 处理并发安全问题
    在这里插入图片描述
  4. 初始化分配到的内存
  5. 设置对象头
  6. 执行init方法进行初始化

三、对象结构

在这里插入图片描述

对象头

对象头主要包含元数据和类型指针

元数据

  1. 对象哈希值
  2. GC分代年龄
  3. 锁状态标志

类型指针:指向方法区中该对象的类元信息

四、执行引擎

将字节码指令解释/编译为对应平台的机器码

动态编译

简单来说就是将java代码编译成字节码文件,再由执行引擎动态的将字节码转换成机器码

解释器
特点:预热快,速度慢
逐行将字节码翻译成机器码

JIT编译器
特点:预热慢,速度快
将热点代码的机器码进行缓存,方便下次直接调用,但若一开始就使用JIT,由于缓存需要额外耗费时间和空间,速度反而要差于解释器,也会额外增加内存消耗

热点代码触发的两种方式

  1. 方法调用计数器:用来记录一段时间内方法的调用次数,超过这段时间若还没达到阈值则次数减半
  2. 回边计数器:记录一个方法内循环体的执行次数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

静态编译

直接将java文件编译成机器码,但这样做会带来两个问题:

  1. 违反了一次编译,到处运行的特点,因为编译出来的机器码只能在一种操作系统上使用
  2. 失去了动态编译的优化

相关文章:

  • 本地缓存组件
  • 掌握这25个单行代码技巧,你也能写出『高端』Python代码
  • 看过来,这里教你如何更好地呈现荣誉证书
  • 计算机视觉图像公开数据集最全汇总
  • 【C++】C++ 引用
  • 量子兔 alphapi 硬件拆解分析 尝试自己从头写库
  • linux常用命令(Beginner note)
  • IDEA+SpringCloudAlibaba微服务搭建
  • 【Python刷题篇】——Python入门 011面向对象(二)
  • 使用Quartz或CronUtil实现动态的任务调度以及任务的管理
  • 死磕它3年,入职京东,要个25K不过分吧?
  • 乐高CPC认证办理儿童玩具出口美国亚马逊CPSIC认证
  • .NET Core Web APi类库如何内嵌运行?
  • Kafka3.2.3基于Linux的集群安装(待续)
  • 数据湖技术之 Hudi 框架概述
  • Angular 响应式表单 基础例子
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • css系列之关于字体的事
  • Hexo+码云+git快速搭建免费的静态Blog
  • jQuery(一)
  • JSDuck 与 AngularJS 融合技巧
  • k8s如何管理Pod
  • linux学习笔记
  • miaov-React 最佳入门
  • uni-app项目数字滚动
  • 回顾 Swift 多平台移植进度 #2
  • 简析gRPC client 连接管理
  • 如何利用MongoDB打造TOP榜小程序
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 什么软件可以剪辑音乐?
  • 使用API自动生成工具优化前端工作流
  • 新书推荐|Windows黑客编程技术详解
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 在weex里面使用chart图表
  • ​secrets --- 生成管理密码的安全随机数​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #大学#套接字
  • #前后端分离# 头条发布系统
  • (4) PIVOT 和 UPIVOT 的使用
  • (day6) 319. 灯泡开关
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (南京观海微电子)——COF介绍
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)创业的注意事项
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)虚函数剖析
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 流——流的类型体系简单介绍
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net2005怎么读string形的xml,不是xml文件。