JVM&G1 GC实战来了!深入浅出的机制,深度把握JVM高级特性和最佳实践

Doris集群管理指南:FE和BE节点配置与监控最佳实践 本文详细介绍了Apache Doris集群管理中FE和BE节点的配置优化与监控最佳实践。从元数据管理、查询协调到高可用架构设计,提供了经过生产验证的参数配置和性能监控指标,帮助管理员构建稳定高效的Doris集群,提升实时分析能力。 阅读详情

前言

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等) 构成。在国内,有关Java类库API、Java语 言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虛拟机的资料却显得异常贫乏。

JVM是Java语言可以跨平台、保持高发展的根本,没有了JVM, Java 语言将失去运行环境。针对Java程序的性能优化一定不可能避免针对JVM的调优,随着JVM的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以GC就是这么重要。

今天,小编就为大家带来两篇学习JVM&G1 GC以及JVM高级特性和最佳实践的秘籍,咱们来一探究竟吧~~~


深入理解JVM&G1 GC

 


内容简介

G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。

本篇主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,者就需要有综合能力的程序员。本书作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。

本书具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。

通读本篇后,读者可以深入了解G1 GC性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。


目录介绍

第一章:JVM&GC基础知识

  • 引言
  • Java相关术语
  • JVM/GC通用术语
  • G1涉及术语

通过本章我们应该理解:

  • 为什么我们需要了解JVM和GC,这是阅读本篇的依据。
  • 了解GC的基础常用术语知识,作者和读者需要对术语定义进行统一。
  • 了解JVM的基础知识,包括堆、栈、方法区等。
  • 为深入了解JVM和GC做好知识储备。

第二章:JVM&GC深入知识

  • Java虚拟机内存模型
  • 垃圾收集算法
  • Garbage Collection
  • 常见问题解析
  • 本章小结

本章主要介绍和解决以下问题

  • 了解JVM和内存相关的知识。
  • 了解常见的垃圾收集算法,这是GC实现的根本目标。
  • 了解GC的基本概念。
  • 了解各类GC的特性。
  • 为深入了解G1GC做好知识储备。

第三章:G1 GC应用示例

  • 范例程序
  • 选项解释及应用

本章主要介绍和解决以下问题,这些也是后续章节的实践部分。

  • 确定一个简单的代码程序作为示例。
  • 了解G1 GC自带的各种命令行选项。
  • 了解各个选项单独或混合使用后的运行输出
  • 对G1 GC输出日志进行一些解释。

第四章:深入G1 GC

  • G1 GC概念简述
  • G1 GC分代管理
  • G1 GC使用场景
  • G1 GC论文原文翻译(部分)

本章是全篇的概念层面核心章节,主要介绍和解决以下问题。

  • 深入学习G1 GC的各种基本概念。
  • 深入学习G1 GC的设计理念。
  • 深入了解G1 GC的各类特性。
  • 为第5章节针对G1GC的性能优化方案做知识准备。

第五章:G1 GC性能优化方案

  • G1的年轻代回收
  • 年轻代优化
  • 并行标记阶段优化
  • 混合回收阶段
  • 如何避免出现GC失败
  • 引用处理

本章主要介绍和解决以下问题,这些也是全篇的概念层面核心章节。

  • 对G1 GC各种概念进一步深入学习。
  • 深入运用G1 GC的特性。

第六章:JVM诊断工具使用介绍

  • SA基础介绍
  • SA工具使用实践
  • 其他工具介绍

本章主要介绍和解决以下问题,这些主要针对SA工具进行学习。

  • 什么是Serviceability Agent工具?
  • 了解相关概念、工具的基本功能及实践介绍。
  • 了解工具的扩展功能、插件介绍。
  • 对一些常见问题作出总结。

书签简介


JVM高级特性和最佳实践

内容概述

本篇一共分为五个部分:走近Java、 自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。

这里并没有假定所有读者都在Java领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虛拟机中与开发关系最为密切的内容。但是,本篇毕竟是在探讨虛拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本篇的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java类库API和Java语法等基础知识点,将假设读者已有所了解。

本篇介绍的Java虛拟机并不局限于某一个特定发行商或者某一款特定虚拟机,只是由于OracleJ DK/OpenJDK在市场占有率上的绝对优势,其中的HotSpot虛拟机不可避免地成为本书主要分析、讲解的对象,本篇在涉及Java虛拟机自身实现相关的内容时,大多将以HotSpot虛拟机为目标对象来进行讲解。但撰写本篇的意图并不是去做HotSpot的源码导读或者解析,本篇所讲述的内容多为Java虚拟机的通用原理,即使读者使用了HotSpot之外的其他Java虚拟机实现,也会有所收获。

目录预览

第一部分:走近Java

  • 走近Java
  • 概述
  • Java技术体系
  • Java发展史
  • Java虚拟机家族
  • 展望Java技术的未来
  • 实战:自己编译JDK

本篇的第一部分为后文的研究和讲解建立了良好的基础。虽然了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必须的,但是这些准备过程可以为走近Java技术和Java虚拟机提供良好的引导。


第二部分:自动内存管理

  • Java内存区域与内存溢出异常
  • 垃圾收集器与内存分配策略
  • 虚拟机性能监控、故障处理工具
  • 调优案例分析与实战

这部分介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。介绍了垃圾收集的算法和HotSpot虚拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。介绍了随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。


第三部分:虚拟机执行子系统

  • 类文件结构
  • 虚拟机类加载机制
  • 虚拟机字节码执行引擎
  • 类加载及执行子系统的案例与实战

这部分讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法, 以实战的方式演示了Class的数据是如何存储和访问的。介绍了类加载过程的“加载”“验证”“准备”“解析”和“初始化”五个阶段中虚拟机分别进行了 哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。通过几个类加载及执行子系统的案例,介绍了使用类加载器和处理字节码的一些值得欣赏 和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。


第四部分:程序编译与代码优化

  • 前端编译与优化
  • 后端编译与优化

这部分分析了Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译器优化技术进行讲解。


第五部分:高效并发

  • Java内存模型与线程

  • 线程安全与锁优化

这部分讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现;介绍了先行发生原则的规则及使用,以及线程在Java语言之中是如何实现的;还提前介绍了目前仍然在实验室状态的Java协程的相关内容。介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所做的一系列锁优化措施。


书签展示

后记

总的来说,本篇对Java JVM、GC机制的分析深入浅出,是对大数据Java内存回收的优秀实践。读完茅塞顿开、受益匪浅。很多技术细节应用之后,对产品性能有明显提升。

喜欢小编整理的这篇JVM&G1 GC和JVM高级特性的话,请多多点赞评论分享,让更多的的人获益。

想要获取文中完整PDF文档的朋友,请转发并关注小编后,私信回复【学习】就可以获得免费领取方式哦~~~

YOLO11训练中的过拟合识别与应对策略:讲解过拟合的表现、原因及应对方法(如数据增强、正则化、DropOut) 摘要 本文深入探讨了YOLO11目标检测模型中的过拟合问题。首先解析了过拟合的本质,即模型在训练数据上表现优异但泛化能力差的现象,并通过误差分解公式解释了其数学原理。文章详细列举了YOLO11中过拟合的具体表现,包括训练与验证指标分化、检测性能不一致性、置信度分布异常和类别检测不均衡等问题,并提供了对应的可视化诊断方法。 在原因分析部分,重点阐述了模型复杂度与数据规模不匹配、训练数据质量与分布问题以及训练策略不当三大根本原因。特别对比了YOLO11不同版本(n/s/m/l/x)的参数量和推荐最小数据量,指出 阅读详情

相关推荐

Mixly 数码管时钟

  本文是米思齐数码管图形化编程实验总结分享,走过路过的来看看吧,其中的不足望指出。 一、实验目的及要求 【实验一】实现滚动显示自定义字符串。 【实验二】实现显示自定义时间。 【实验三】实现显示秒表。 二、实验原理与内容 实现米思齐的数码管图形化编程。 三、实验软硬件环境 硬件:Arduino、TM1637数码管 软件:Mixly IDE 四、核心代码及实验效果如下所示 1.实现滚动显示...

weixin_44614199的博客 1648

JVM性能调优详解

前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及...

程序新视界 7706

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

JVM性能调优之内存优化与GC优化

JVM 调优是一个系统而又复杂的过程, 但我们知道, 在大多数情况下, 我们基本不用去调整 JVM 内存分配, 因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。 在应用服务的特定场景下, JVM 内存分配不合理带来的性能表现并不会像内存溢出问题这么突出。 一般没有深入到各项性能指标中去, 是很难发现其中隐藏的性能损耗。 一、准备阶段 1、压测工具 Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具, 具有简单易上手的特点...

weixin_32822759的博客 1066

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

本文深入分析Windows系统下pip install SSLError与SSL模块缺失的根本原因,提供系统级修复方案。从Python安装包缺失SSL支持、OpenSSL库冲突到环境变量配置问题,详细讲解四大成因及对应的解决方案,包括重新安装Python、手动修复OpenSSL依赖等实用技巧,帮助开发者彻底解决HTTPS连接问题。

weixin_28595749的博客 459

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2213

压测工具Ab(ApacheBench)使用入门,JVM堆内存调优及GC优化

Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。 ab 一般都是在Linux上用。 安装非常简单,只需要在 Linux 系统中输入 yum-y install httpd-tools 命令,就可以了。 安装成功后,输入 ab 命令,可以看到以下信息: ab 工具用来测试 post get 接口请求非常便捷,可以通过参数指定请求数、并发数、请求参数等。 测试 get 请求接口 ab -c 10 -n 100 http://w

*King*的博客 3574

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 754

JVM 性能调优之内存优化与 GC 优化

JVM 性能调优之内存优化与 GC 优化 JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用 服务正常稳定地工作了。 在应用服务的特定场景下,JVM 内存分配不合理带来的性能表现并不会像内存溢出问题这么突出。一般你没有深入到各项性能指标中去,是很难发现其 中隐藏的性能损耗。 压测工具 AB Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用

qq_40661791的博客 363

光通量与辐射通量之间的换算

由理论和实验可知存在两种定义: 1W1W1W(瓦特)的频率为540×1012Hz540\times10^{12}Hz540×1012Hz(赫兹)的单色辐射的辐射通量等于683lm(流明)683lm(流明)683lm(流明).。 1lm1lm1lm的频率为540×1012Hz540\times10^{12}Hz540×1012Hz的单色通量等于1683=0.001464W\frac{1}{683}=0.001464W6831​=0.001464W。 从上述定义中我们可以得到什么呢?我们知道光速: c=3×

u011699626的博客 3273

NVIDIA Isaac ROS - 入门教程(一)

欢迎访问 Isaac ROS,这是一套硬件加速、高性能、低延迟的 ROS 2 软件包,用于制造自主机器人,充分利用 Jetson 和其他英伟达平台的强大功能。英伟达 Jetson 平台运行在基于 Ubuntu Linux 的 JetPack 操作系统上。JetPack 5.x 是在 Ubuntu 20.04 Focal 的基础上构建的,这意味着由 ROS 2 Buildfarm 为 Ubuntu 22.04 Jammy 构建的 ROS 2 Humble 的 Debian 包不受支持。由于官方 ROS 2 B

机器人控制与仿真应用 5723

JVM优化--优化gc

什么时候需要排查gc问题 我们遇到什么样的现象会怀疑gc有问题,进而优化呢?gc问题大体上可以分为两类:内存溢出、gc不健康。 内存溢出一般会借助dump文件进行查看,设置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/system/error.dump可以在发生oom时给出dump信息。有了dump信息可以使用MAT,Jprofile,jvisualvm 进行排查。 gc不健康主要表现在这么几个方面:young gc频

吴阳春的博客 2217

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3037

干货来袭!JVM&G1 GC+JVM高级特性和最佳实践,助你深度掌握JVM

G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。本篇主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,者就需要有综合能力的程序员。

老男孩的架构路 591

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JVM学习03——OOM

文章目录JVM学习03——OOMjava堆溢出虚拟机栈和本地方法栈溢出方法区和运行时常量池溢出本机直接内存溢出 JVM学习03——OOM 在java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都会发生OutOfMemoryError异常的可能。 java堆溢出 通过命令: java -Xmx20m -Xms20m -XX:+HeapDumpOnOutOfMemoryErro...

qq_22343953的博客 190

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jvm调优三(G1垃圾回收器)

jvm之G1

简单,快乐,拥抱变化 643

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【java】Java应用程序性能优化(JVM调优)

作为Java开发人员和系统架构师,了解并掌握JVM调优是提高Java应用程序性能的关键。本文将结合理论和实践,介绍一些常用的JVM调优技术和实战案例,帮助你优化Java应用程序的性能。JVM(Java虚拟机)是执行Java字节码的运行环境,而JVM调优是通过调整JVM参数和配置,优化Java应用程序的性能和资源利用率。内存管理:调整堆内存、非堆内存、垃圾回收器等参数,优化内存分配和回收策略,避免内存泄漏和频繁的垃圾回收。

DreamSun的博客 1384

JVM内存调优:GC 优化+HotSpot VM 参数

JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿,避免应用运行时发生抖动。 内存占用 - 垃圾收集器流畅运行所需要的内存数量。 调优原则 GC 优化的两个目标: 将进入老年代的对象数量降到最低 减少 Full GC...

SRHR0的博客 530

JVM 调优参数详解

GC有两种类型:Scavenge GC 和Full GC 1、Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor的两个区中。 2、Full GC 对整个堆进行整理,包括Young、Tenured和Perm。Full GC 比Scavenge GC

上海男孩博客 354

【Java 8 GC 调优】G1 调优

此节介绍如何调整和优化G1,以进行评估、分析和性能测试。 如《G1》所述,G1 是一个 分区、分“代” 的收集器,这意味着Java对象堆被分成了许多大小相等的区域。JVM启动时会设置区域大小。区域大小取决于堆大小,从 1MB 到 32MB。目标是不超过 2048 个区域。Eden、Survivor 和 老年代 是逻辑集合,且不是连续的。 G1 有一个尝试达成的 暂停时长 目标(这是一个软实时目...

一个被IT搞的 3852

JVM GC频繁优化

GC频繁优化 压力大时GC 12秒一次,需要进行优化。 优化前 GC约2分钟一次 内存到达1.18g,约60%时触发了minorGc jvm参数 -Xms2g -Xmx2g -Xmn768m -XX:MaxTenuringThreshold=13 优化一 观察到使用的内存其实占用率极低,可以适当增加年轻代的大小。 -Xmn1g -XX:+PrintGCDetails -Xloggc:…/logs/gc.log GC间隔时间稍有增大。 观察GC日志 出现间隔时间比较短的Full

过了这个村没这个老王的博客 1281

JVM 配置常用参数和常用 GC 调优策略

JVM 配置常用参数和常用 GC 调优策略JVM 配置常用参数堆参数回收器参数项目中常用配置常用组合常用 GC 调优策略GC 调优原则GC 调优目的 JVM 配置常用参数 堆参数 回收器参数 目前主要有串行、并行和并发三种,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行和并发 GC 的策略通过 UseParallelGC 和 UseConcMarkSweepGC...

爱是与世界平行 1658

gc java内存模型优化_JVM内存模型、GC、优化建议

JVM内存结构JVM内存由堆、栈、本地方法栈、方法区、程序计数器组成内存结构如下所示,s0是survivor from空间 ,s1是survivor to空间1)堆所有执行的new对象操作都会在堆中分配一块存储空间。堆被划分为新生代和老生代,新生代又被划分为Eden和survivor两部分,其中survivor又被划分为from space和to space。新生代:所有new的对象首先在eden...

weixin_36350479的博客 676

JVM 性能优化(三)G1 垃圾收集器 (1),java 原理书籍

第一步:开启 G1 垃圾收集器第二步:设置堆的最大内存第三步:设置最大的停顿时间G1 中提供了三种模式垃圾回收模式,Young GC、Mixed GC 和 Full GC ,在不同的条件下被触发。二、原理G1 垃圾收集器相比于其他收集器而言,最大的区别在于它取消了年轻代、老年代的物理划分,取而代之的是将堆划分为若干个区域(Region),这些区域中包含了有逻辑上的年轻代、老年代区域这样做的好处就是,我们再也不用单独的空间对每个代进行设置了,不用担心每个代内存是否足够。

m0_69804655的博客 685

Java GC原理和性能调优实践

前言 本文介绍 GC 基础原理和理论,GC 调优方法思路和方法,基于 Hotspot jdk1.8,学习之后你将了解如何对生产系统出现的 GC 问题进行排查解决。 正文 本文的内容主要如下: GC 基础原理,涉及调优目标,GC 事件分类、JVM 内存分配策略、GC 日志分析等 CMS 原理及调优。 G1 原理及调优 GC 问题排查和解决思路 1. GC 基础原理 1.1. GC 调...

zzhongcy的专栏 1593

JVM-垃圾收集器之G1

G1垃圾回收器

qq_36010886的博客 925
上一篇: 京东大佬整理的亿级流量架构核心技术,助力智能时代,成就非凡
下一篇: 干货来袭,请注意!SSM框架全解析,深入理解有奇效
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值