JVM之Synthetic
Synthetic是人造,合成的意思,在虚拟机很多地方使用ACC_SYNTHETIC表示编译器自动生成的,区别于我们自己写的程序代码。这样说可能比较模糊,我们举个例子:我们创建一个内部类,如下
public class TestInnerClass {public void say(String msg) {System.out.println(msg);}class InnerClass {public void sayInner() {say("hello");}}
}
我们用javap看一下内部类InnerClass反编译之后的情况:

完整如下:
Classfile /F:/demo/mallsystem/provider/target/classes/com/mall/test/TestInnerClass$InnerClass.classLast modified 2024-11-28; size 638 bytesMD5 checksum 9f5efd7b8d0ad50545773d2a0e198f60Compiled from "TestInnerClass.java"
class com.mall.test.TestInnerClass$InnerClassminor version: 0major version: 52flags: ACC_SUPER
Constant pool:#1 = Fieldref #5.#22 // com/mall/test/TestInnerClass$InnerClass.this$0:Lcom/mall/test/TestInnerClass;#2 = Methodref #6.#23 // java/lang/Object."<init>":()V#3 = String #24 // hello#4 = Methodref #25.#26 // com/mall/test/TestInnerClass.say:(Ljava/lang/String;)V#5 = Class #27 // com/mall/test/TestInnerClass$InnerClass#6 = Class #28 // java/lang/Object#7 = Utf8 this$0#8 = Utf8 Lcom/mall/test/TestInnerClass;#9 = Utf8 <init>#10 = Utf8 (Lcom/mall/test/TestInnerClass;)V#11 = Utf8 Code#12 = Utf8 LineNumberTable#13 = Utf8 LocalVariableTable#14 = Utf8 this#15 = Utf8 InnerClass#16 = Utf8 InnerClasses#17 = Utf8 Lcom/mall/test/TestInnerClass$InnerClass;#18 = Utf8 sayInner#19 = Utf8 ()V#20 = Utf8 SourceFile#21 = Utf8 TestInnerClass.java#22 = NameAndType #7:#8 // this$0:Lcom/mall/test/TestInnerClass;#23 = NameAndType #9:#19 // "<init>":()V#24 = Utf8 hello#25 = Class #29 // com/mall/test/TestInnerClass#26 = NameAndType #30:#31 // say:(Ljava/lang/String;)V#27 = Utf8 com/mall/test/TestInnerClass$InnerClass#28 = Utf8 java/lang/Object#29 = Utf8 com/mall/test/TestInnerClass#30 = Utf8 say#31 = Utf8 (Ljava/lang/String;)V
{final com.mall.test.TestInnerClass this$0;descriptor: Lcom/mall/test/TestInnerClass;flags: ACC_FINAL, ACC_SYNTHETICcom.mall.test.TestInnerClass$InnerClass(com.mall.test.TestInnerClass);descriptor: (Lcom/mall/test/TestInnerClass;)Vflags:Code:stack=2, locals=2, args_size=20: aload_01: aload_12: putfield #1 // Field this$0:Lcom/mall/test/TestInnerClass;5: aload_06: invokespecial #2 // Method java/lang/Object."<init>":()V9: returnLineNumberTable:line 12: 0LocalVariableTable:Start Length Slot Name Signature0 10 0 this Lcom/mall/test/TestInnerClass$InnerClass;0 10 1 this$0 Lcom/mall/test/TestInnerClass;public void sayInner();descriptor: ()Vflags: ACC_PUBLICCode:stack=2, locals=1, args_size=10: aload_01: getfield #1 // Field this$0:Lcom/mall/test/TestInnerClass;4: ldc #3 // String hello6: invokevirtual #4 // Method com/mall/test/TestInnerClass.say:(Ljava/lang/String;)V9: returnLineNumberTable:line 14: 0line 15: 9LocalVariableTable:Start Length Slot Name Signature0 10 0 this Lcom/mall/test/TestInnerClass$InnerClass;
}
SourceFile: "TestInnerClass.java"
InnerClasses:#15= #5 of #25; //InnerClass=class com/mall/test/TestInnerClass$InnerClass of class com/mall/test/TestInnerClass
重点看下面标记的,ACC_SYNTHETIC标记出现了

这里编译器在内部类生成了一个TestInnerClass的引用对象this$0,因为是编译器自动合成的,所以标记了ACC_SYNTHETIC。
而下面是内部类的构造方法,可以看到它传入了外部类的实例对象,之后把它赋值给this$0
aload_0默认是实例方法第一个参数是this,即内部类自己的引用
aload_1则是加载第一个入参也就是外部类实例对象
putfield #1就是把外部实例设置给this$0

所以这也就解释了为什么内部类创建需要外部类对象创建了,如果外部类对象还没有生成,怎么传给内部类的构造方法呢?
而我们内部类能调用外部类的方法,也正是通过外部类的实例对象调用的
相关文章:
JVM之Synthetic
Synthetic是人造,合成的意思,在虚拟机很多地方使用ACC_SYNTHETIC表示编译器自动生成的,区别于我们自己写的程序代码。这样说可能比较模糊,我们举个例子:我们创建一个内部类,如下 public class TestInnerCl…...
HCIE IGP双栈综合实验
实验拓扑 实验需求及解法 本实验模拟ISP网络结构,R1/2组成国家骨干网,R3/4组成省级网络,R5/6/7组成数据中 心网络。 配置所有ipv4地址,请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…...
【k8s】监控metrics-server
metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标,通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
将面具贴到人脸上的过程
使用OpenCV进行人脸面具贴合和变形以适应人脸的3D透视角度,通常需要以下步骤: 人脸检测:首先需要检测图像中的人脸位置。特征点检测:在检测到的人脸区域中,找到关键特征点,如眼睛、鼻子、嘴巴等。透视变换…...
【Maven】Nexus私服
6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…...
AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。
大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…...
探索温度计的数字化设计:一个可视化温度数据的Web图表案例
随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…...
我不是挂王-用python实现燕双鹰小游戏
一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...
Java:反射、注解
文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射:加载类,并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...
Java 通过枚举类减少if else
目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类,用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...
单链表---移除链表元素
对于无头单向不循环链表,给出头结点head与数值val,删除链表中数据值val的所有结点 #define ListNodeDataType val struct ListNode { struct ListNode* psll;ListNodeDataType val; } 方法一---遍历删除 移除所有数值为val的链表结点,…...
认识redis 及 Ubuntu安装redis
文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…...
Java开发网络安全常见问题
1、敏感信息明文传输 用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。 如下图中小红书APP 的手机短信验证码登录接口,此处没有对用户手机号和验证码等信息进行加密传输,可以很简单的截取并开展一些合法的…...
C#基础之委托,事件
文章目录 1 委托1.1 简介1.2 操作使用1.2.1 声明委托(Delegate)1.2.2 实例化委托(Delegate)1.2.3 直接调用和invoke1.2.4 Invoke 和 BeginInvoke 1.3 委托的多播1.4 委托的匿名和lambda1.4.1 匿名方法1.4.2 lambda 表达式 1.5 内置…...
nginx配置静态资源的访问
比如静态资源图片位于/mnt/software/nginx/html/static/images目录下,那么nginx.conf中的配置则为: # 静态文件目录 location /static/images/ { root /mnt/software/nginx/html; try_files $uri $uri/ 404; #找不到时提示404 …...
JS的魔法三角:constructor、prototype与__proto__
在JavaScript中,constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角: 1. constructor 定义:constructor是一个函数&am…...
CA系统(file.h---申请认证的处理)
#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件,返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…...
Uniapp集成智能客服功能实战:从选型到性能优化的完整指南
在移动应用生态中,客服系统已从“成本中心”转变为“增长引擎”。数据显示,一个响应迅速、体验流畅的在线客服系统,能将用户咨询转化率提升30%以上,并显著降低用户流失率。对于使用Uniapp开发的跨平台应用而言,集成一套…...
AI写专著必备:优质工具大盘点,全方位提升专著撰写效率
撰写学术专著时,研究者需要在“内容的深度”和“覆盖的广度”之间找到一个恰当的平衡,而这正是许多人面临的主要难题。从深度出发,专著的核心论点需要具备足够的学术分量,不仅要清楚解答“是什么”,还应该深入探讨“为…...
解向量前33位是DG位置,后33位是无功补偿容量
3.基于遗传算法的配电网优化配置 主要内容:分布式电源、无功补偿装置接入配电网,考虑配电网经济性和电能质量为目标函数,使用遗传算法进行优化配置,在IEEE33节点,118节点系统进行了仿真验证。 文件夹内运行main函数。配…...
vLLM-v0.17.1详细步骤:SSH远程部署+Jupyter可视化结果分析全流程
vLLM-v0.17.1详细步骤:SSH远程部署Jupyter可视化结果分析全流程 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已经发展成为一个活跃的社区驱动项目…...
23种设计模式 - 建造者模式(Builder)
建造者模式(Builder)—— 一步一步拼出来 大白话解释 你去点外卖套餐,可以自己一步步选: 选主食(汉堡 / 鸡腿)选饮料(可乐 / 橙汁)选大小(中杯 / 大杯)要不要…...
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理 你是不是也遇到过这样的情况:好不容易找到一个功能强大的视觉语言大模型,比如最近挺火的Ostrakon-VL-8B,结果一看显存要求,直接傻眼了——动辄需要几十个G的显存…...
巨有科技:景区二消低迷?智慧旅游重构盈利模式
门票降价、客流增长但营收不涨,是当下多数景区面临的经营困境。过度依赖门票经济,二次消费(二消)占比低、业态单一,景区盈利空间不断被压缩。2026年文旅行业告别粗放增长,景区盈利重心向二次消费转移&#…...
商家客服智能管理系统架构设计与性能优化实战
商家客服智能管理系统架构设计与性能优化实战 面对电商大促期间海量用户的咨询涌入,传统的客服系统往往不堪重负。我记得去年双十一,我们团队维护的客服系统就经历了严峻考验:页面响应时间从平时的200ms飙升到2秒以上,大量用户排队…...
AI训练师真实收入全景图:软件测试员的蓝海突围指南
一、薪资迷雾:从“月入六万神话”到基层现实2026年AI训练师岗位呈现极端薪资分化,需穿透表象看本质:头部光环案例:大厂高阶岗位(如AI伦理设计师、大模型优化专家)年薪可达60-100万元,但通常要求…...
FSCalendar深度链接集成指南:从URL直接打开指定日期的终极解决方案
FSCalendar深度链接集成指南:从URL直接打开指定日期的终极解决方案 【免费下载链接】FSCalendar 项目地址: https://gitcode.com/gh_mirrors/fsc/FSCalendar FSCalendar是一款功能强大的iOS日历组件,支持高度自定义和流畅的用户体验。在移动应用…...
