重磅:JDK 11 正式发布!东半球第二全特性解读!

Win10安装JDK11(超详细) 安装JDK11JAVA_HOME的作用Path的作用JDK11没有jre文件 阅读详情

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 

来源:https://mp.weixin.qq.com/s/Yz8V3inWN8uErKM-IdMFWQ

千呼万唤,JDK11于2018-09-25正式发布!你是不是和笔者一样还在使用JDK8呢?甚至有些开发者还在使用JDK7!没关系,让我们先一睹JDK11的风采。

JDK11发布计划

2018/06/28 Rampdown Phase One (fork from main line)
2018/07/19 All Tests Run
2018/07/26 Rampdown Phase Two
2018/08/16 Initial Release Candidate
2018/08/30 Final Release Candidate
2018/09/25 General Availability

说明:GA即General Availability,也就是官方推荐可以广泛使用的版本。

JDK11特性一览

181: Nest-Based Access Control
309: Dynamic Class-File Constants
315: Improve Aarch64 Intrinsics
318: Epsilon: A No-Op Garbage Collector
320: Remove the Java EE and CORBA Modules
321: HTTP Client (Standard)
323: Local-Variable Syntax for Lambda Parameters
324: Key Agreement with Curve25519 and Curve448
327: Unicode 10
328: Flight Recorder
329: ChaCha20 and Poly1305 Cryptographic Algorithms
330: Launch Single-File Source-Code Programs
331: Low-Overhead Heap Profiling
332: Transport Layer Security (TLS) 1.3
333: ZGC: A Scalable Low-Latency Garbage Collector
   (Experimental)
335: Deprecate the Nashorn JavaScript Engine
336: Deprecate the Pack200 Tools and API

特性详解

接下来对每个特性进行详细解读。

JEP 318: Epsilon: A No-Op Garbage Collector

JDK上对这个特性的描述是:开发一个处理内存分配但不实现任何实际内存回收机制的GC,一旦可用堆内存用完,JVM就会退出。

如果有System.gc()的调用,实际上什么也不会发生(这种场景下和-XX:+DisableExplicitGC效果一样),因为没有内存回收,这个实现可能会警告用户尝试强制GC是徒劳。

用法非常简单:-XX:+UseEpsilonGC。


动机

提供完全被动的GC实现,具有有限的分配限制和尽可能低的延迟开销,但代价是内存占用和内存吞吐量。

众所周知,Java实现可广泛选择高度可配置的GC实现。 各种可用的收集器最终满足不同的需求,即使它们的可配置性使它们的功能相交。 有时更容易维护单独的实现,而不是在现有GC实现上堆积另一个配置选项。

它的主要用途如下:

  • 性能测试(它可以帮助过滤掉GC引起的性能假象);

  • 内存压力测试(例如,知道测试用例应该分配不超过1 GB的内存,我们可以使用-Xmx1g配置-XX:+UseEpsilonGC,如果违反了该约束,则会heap dump并崩溃);

  • 非常短的JOB任务(对于这种任务,接受GC清理堆那都是浪费空间);

  • VM接口测试;

  • Last-drop 延迟&吞吐改进;

JEP 320: Remove the Java EE and CORBA Modules

Java EE和CORBA两个模块在JDK9中已经标记"deprecated",在JDK11中正式移除。JDK中deprecated的意思是在不建议使用,在未来的release版本会被删除。


动机

JavaEE由4部分组成:

  • JAX-WS (Java API for XML-Based Web Services),

  • JAXB (Java Architecture for XML Binding)

  • JAF (the JavaBeans Activation Framework)

  • Common Annotations.

但是这个特性和JavaSE关系不大。并且JavaEE被维护在Github(https://github.com/javaee)中,版本同步造成维护困难。最后,JavaEE可以单独引用,maven中心仓库也提供了JavaEE(http://mvnrepository.com/artifact/javax/javaee-api/8.0),所以没必要把JavaEE包含到JavaSE中。

至于CORBA,使用Java中的CORBA开发程序没有太大的兴趣。因此,在JavaEE就把CORBA标记为"Proposed Optional",这就表明将来可能会放弃对这些技术的必要支持。

JEP 321: HTTP Client (Standard)

将JDK9引进并孵化的HTTP客户端API作为标准,即HTTP/2 Client。它定义了一个全新的实现了HTTP/2和WebSocket的HTTP客户端API,并且可以取代HttpURLConnection。


动机

已经存在的HttpURLConnection有如下问题:

  • 在设计时考虑了多种协议,但是现在几乎所有协议现已不存在。

  • API早于HTTP/1.1并且太抽象;

  • 使用很不友好;

  • 只能以阻塞模式工作;

  • 非常难维护;

JEP 323: Local-Variable Syntax for Lambda Parameters

在声明隐式类型的lambda表达式的形参时允许使用var。


动机

lamdba表达式可能是隐式类型的,它形参的所有类型全部靠推到出来的。隐式类型lambda表达式如下:

(x, y) -> x.process(y)

Java SE 10让隐式类型变量可用于本地变量:

var foo = new Foo();
for (var foo : foos) { ... }
try (var foo = ...) { ... } catch ...

为了和本地变量保持一致,我们希望允许var作为隐式类型lambda表达式的形参:

(var x, var y) -> x.process(y) 

统一格式的一个好处就是modifiers和notably注解能被加在本地变量和lambda表达式的形参上,并且不会丢失简洁性:

@Nonnull var x = new Foo();
(@Nonnull var x, @Nullable var y) -> x.process(y)

JEP 320: Remove the Java EE and CORBA Modules

Java EE和CORBA两个模块在JDK9中已经标记"deprecated",在JDK11中正式移除。JDK中deprecated的意思是在不建议使用,在未来的release版本会被删除。


动机

JavaEE由4部分组成:

  • JAX-WS (Java API for XML-Based Web Services),

  • JAXB (Java Architecture for XML Binding)

  • JAF (the JavaBeans Activation Framework)

  • Common Annotations.

但是这个特性和JavaSE关系不大。并且JavaEE被维护在Github(https://github.com/javaee)中,版本同步造成维护困难。最后,JavaEE可以单独引用,maven中心仓库也提供了JavaEE(http://mvnrepository.com/artifact/javax/javaee-api/8.0),所以没必要把JavaEE包含到JavaSE中。

至于CORBA,使用Java中的CORBA开发程序没有太大的兴趣。因此,在JavaEE就把CORBA标记为"Proposed Optional",这就表明将来可能会放弃对这些技术的必要支持。

JEP 321: HTTP Client (Standard)

将JDK9引进并孵化的HTTP客户端API作为标准,即HTTP/2 Client。它定义了一个全新的实现了HTTP/2和WebSocket的HTTP客户端API,并且可以取代HttpURLConnection。


动机

已经存在的HttpURLConnection有如下问题:

  • 在设计时考虑了多种协议,但是现在几乎所有协议现已不存在。

  • API早于HTTP/1.1并且太抽象;

  • 使用很不友好;

  • 只能以阻塞模式工作;

  • 非常难维护;

JEP 323: Local-Variable Syntax for Lambda Parameters

在声明隐式类型的lambda表达式的形参时允许使用var。


动机

lamdba表达式可能是隐式类型的,它形参的所有类型全部靠推到出来的。隐式类型lambda表达式如下:

(x, y) -> x.process(y)

Java SE 10让隐式类型变量可用于本地变量:

var foo = new Foo();
for (var foo : foos) { ... }
try (var foo = ...) { ... } catch ...

为了和本地变量保持一致,我们希望允许var作为隐式类型lambda表达式的形参:

(var x, var y) -> x.process(y) 

统一格式的一个好处就是modifiers和notably注解能被加在本地变量和lambda表达式的形参上,并且不会丢失简洁性:

@Nonnull var x = new Foo();
(@Nonnull var x, @Nullable var y) -> x.process(y)

JEP 324: Key Agreement with Curve25519 and Curve448

用RFC 7748中描述到的 Curve25519 和Curve448 实现秘钥协议。RFC 7748定义的秘钥协商方案更高效,更安全。这个JEP的主要目标就是为这个标准定义API和实现。


动机

密码学要求使用 Curve25519 和Curve448 是因为它们的安全性和性能。JDK会增加两个新的接口XECPublicKey 和 XECPrivateKey,示例代码如下:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("XDH");
NamedParameterSpec paramSpec = new NamedParameterSpec("X25519");
kpg.initialize(paramSpec); // equivalent to kpg.initialize(255)
// alternatively: kpg = KeyPairGenerator.getInstance("X25519")
KeyPair kp = kpg.generateKeyPair();

KeyFactory kf = KeyFactory.getInstance("XDH");
BigInteger u = ...
XECPublicKeySpec pubSpec = new XECPublicKeySpec(paramSpec, u);
PublicKey pubKey = kf.generatePublic(pubSpec);

KeyAgreement ka = KeyAgreement.getInstance("XDH");
ka.init(kp.getPrivate());
ka.doPhase(pubKey, true);
byte[] secret = ka.generateSecret();

JEP 327: Unicode 10

更新平台API支持Unicode 10.0版本(Unicode 10.0概述:Unicode 10.0 增加了8518 个字符, 总计达到了136,690个字符. 并且增加了4个脚本, 总结139个脚本, 同时还有56个新的emoji表情符号。参考:http://unicode.org/versions/Unicode10.0.0/)。


动机

Unicode是一个不断进化的工业标准,因此必须不断保持Java和Unicode最新版本同步。

JEP 328: Flight Recorder

提供一个低开销的,为了排错Java应用问题,以及JVM问题的数据收集框架,希望达到的目标如下:

  • 提供用于生产和消费数据作为事件的API;

  • 提供缓存机制和二进制数据格式;

  • 允许事件配置和事件过滤;

  • 提供OS,JVM和JDK库的事件;


动机

排错,监控,性能分析是整个开发生命周期必不可少的一部分,但是某些问题只会在大量真实数据压力下才会发生在生产环境。

Flight Recorder记录源自应用程序,JVM和OS的事件。 事件存储在一个文件中,该文件可以附加到错误报告中并由支持工程师进行检查,允许事后分析导致问题的时期内的问题。工具可以使用API从记录文件中提取信息。

多说一句:Flight Recorder的名字来源有点像来自于飞机的黑盒子,一种用来记录飞机飞行情况的的仪器。而Flight Recorder就是记录Java程序运行情况的工具。

JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms

实现RFC 7539中指定的 ChaCha20 和 ChaCha20-Poly1305 两种加密算法。


动机

唯一一个其他广泛采用的RC4长期以来一直被认为是不安全的,业界一致认为当下ChaCha20-Poly1305是安全的。

JEP 330: Launch Single-File Source-Code Programs

增强Java启动器支持运行单个Java源代码文件的程序。


动机

单文件程序是指整个程序只有一个源码文件,通常是早期学习Java阶段,或者写一个小型工具类。以HelloWorld.java为例,运行它之前需要先编译。我们希望Java启动器能直接运行这个源码级的程序:

java HelloWorld.java

等价于:

javac -d <memory> HelloWorld.java
java -cp <memory> helloWorld
java Factorial.java 3 4 5

等价于:

javac -d <memory> Factorial.java
java -cp <memory> Factorial 3 4 5

到JDK10为止,Java启动器能以三种方式运行:

  1. 启动一个class文件;

  2. 启动一个JAR中的main方法类;

  3. 启动一个模块中的main方法类;

JDK11再加一个,即第四种方式:启动一个源文件申明的类。

JEP 331: Low-Overhead Heap Profiling

提供一种低开销的Java堆分配采样方法,得到堆分配的Java对象信息,可通过JVMTI访问。希望达到的目标如下:

  • 足够低的开销,可以默认且一直开启;

  • 能通过定义好的程序接口访问;

  • 能采样所有分配;

  • 能给出生存和死亡的Java对象信息;


动机

对用户来说,了解它们堆里的内存是很重要的需求。目前有一些已经开发的工具,允许用户窥探它们的堆,比如:Java Flight Recorder, jmap, YourKit, 以及VisualVM tools.。但是这工具都有一个很大的缺点:无法得到对象的分配位置。headp dump以及heap histo都没有这个信息,但是这个信息对于调试内存问题至关重要。因为它能告诉开发者,他们的代码发生(尤其是坏的)分配的确切位置。

JEP 332: Transport Layer Security (TLS) 1.3

实现TLS协议1.3版本。(TLS允许客户端和服务端通过互联网以一种防止窃听,篡改以及消息伪造的方式进行通信)。


动机

TLS 1.3是TLS协议的重大改进,与以前的版本相比,它提供了显着的安全性和性能改进。其他供应商的几个早期实现已经可用。我们需要支持TLS 1.3以保持竞争力并与最新标准保持同步。这个特性的实现动机和Unicode 10一样,也是紧跟历史潮流。

JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)

ZGC:这应该是JDK11最为瞩目的特性,没有之一。但是后面带了Experimental,说明还不建议用到生产环境。看看官方对这个特性的目标描述:

  • GC暂停时间不会超过10ms;

  • 即能处理几百兆小堆,也能处理几个T的大堆(OMG);

  • 和G1相比,应用吞吐能力不会下降超过15%;

  • 为未来的GC功能和利用colord指针以及Load barriers优化奠定基础;

  • 初始只支持64位系统;


动机

GC是Java主要优势之一。然而,当GC停顿太长,就会开始影响应用的响应时间。消除或者减少GC停顿时长,Java将对更广泛的应用场景是一个更有吸引力的平台。此外,现代系统中可用内存不断增长, 用户和程序员希望JVM能够以高效的方式充分利用这些内存,并且无需长时间的GC暂停时间。

ZGC一个并发,基于region,压缩型的垃圾收集器,只有root扫描阶段会STW,因此GC停顿时间不会随着堆的增长和存活对象的增长而变长。

ZGC和G1停顿时间比较:

ZGC
                avg: 1.091ms (+/-0.215ms)
    95th percentile: 1.380ms
    99th percentile: 1.512ms
  99.9th percentile: 1.663ms
 99.99th percentile: 1.681ms
                max: 1.681ms

G1
                avg: 156.806ms (+/-71.126ms)
    95th percentile: 316.672ms
    99th percentile: 428.095ms
  99.9th percentile: 543.846ms
 99.99th percentile: 543.846ms
                max: 543.846ms

用法:-XX:+UnlockExperimentalVMOptions -XX:+UseZGC,因为ZGC还处于实验阶段,所以需要通过JVM参数UnlockExperimentalVMOptions 来解锁这个特性。

参考:http://openjdk.java.net/projects/jdk/11/



如果你对 Dubbo / Netty 等等源码与原理感兴趣,欢迎加入我的知识星球一起交流。长按下方二维码噢:


目前在知识星球更新了《Dubbo 源码解析》目录如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

... 一共 69+ 篇

目前在知识星球更新了《Netty 源码解析》目录如下:

01. 调试环境搭建
02. NIO 基础
03. Netty 简介
04. 启动 Bootstrap

05. 事件轮询 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 字节缓冲区 ByteBuf

09. 通道处理器 ChannelHandler

10. 编解码 Codec

11. 工具类 Util

... 一共 61+ 篇

目前在知识星球更新了《数据库实体设计》目录如下:

01. 商品模块
02. 交易模块
03. 营销模块
04. 公用模块

... 一共 17+ 篇

JDK11优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析 JDK 11 新增和修改了以下特性:引入了基于 HTTP/2 的标准化的 HTTP Client API,添加了字符串方法,如 `isBlank()` 和 `lines()`,引入了嵌套方法和变量,移除了 Java EE 相关模块,废弃了 Pack200 工具和 Security Manager,改进了性能和稳定性,并进行了其他一些小的改进和优化。 阅读详情

相关推荐

神联动:LSTM+卡尔曼滤波!一区大门轻松开!

近来热度飙升,成为时间序列预测和状态估计等领域的香饽饽,非常好发高区!主要在于:这两者结合,不仅能提高模型预测准确性;还能拓展应用场景,为我们的论文创新提供发挥空间,且当下还在蓝海阶段,还不算卷。具体点说:卡尔曼滤波擅长处理线性状态估计和噪声,能使LSTM更好地适应动态环境的变化,减少噪声干扰,降低预测误差。而LSTM通过捕捉长期依赖关系,擅长处理非线性时间序列,能够弥补卡尔曼滤波在这方面的不足,从而把应用场景从传统的状态估计,延伸到金融预测、工业检测、自动驾驶等任务。

2401_82426425的博客 2210

Win10安装jdk11及环境变量配置

Win10安装jdk11及环境变量配置写在前面卸载旧版本jdk下载jdk11配置环境变量经验教训 写在前面 我第一次安装java是在17年初,距离现在已经一年半了。今天上oracle官网一看,jdk都已经更新到11.0.1了,然而我用的还是1.8.0_171版本的老古董,遂决定把jdk升级一下,结果没想到这一升级就折腾了老半天。在这里把我的升级的详细步骤以及经验教训和大家分享一下。 卸载旧版本jd...

climber16的博客 12万+

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7336

8个维度,详细分析JDK11的新特性!

zgc在进行对象转移的过程中,只需要修改对象指针的几个标志位,相当于g1需要在对象转移时读取对象头来说,少了内存读取的操作,速度更快。由于JDK8已经在市场稳居很长一段时间了,所以本文不会对JDK8的新特性进行讲解,如果有需要JDK8新特性相关教程的童鞋,可以在评论区给波哥留言。zgc的内存区域分成三个页面,小页面2M,中页面32M,大页面2的n次方,而g1页面一般分成2048个region,每个region大小是2M/4M/8M。进入源码发现比如类似isBlank这样的方法的确实在jdk11开始出现的。.

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 1万+

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 425

【博客汇总】UV打印机博客汇总

UV平板机博客汇总

Print World的专栏 1750

jdk11 下载与安装(非常详细,一步不落!!!)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。

一个正在学习中的小菜鸟 17万+

【时时三省】tessy 集成测试 总论

序论不积跬步无以至千里,不积小流无以成江海。正文。

时时三省的博客 1148

开启JDK 11时代,掌握这些新特性,成为Java开发高手!

这篇文章你值得一阅!讲技术我觉得应该让外行也能看明白,而不是一堆专业术语堆砌,像在读天书一般,到最后感觉云里雾里。

孤芳不自赏 2781

【小白深度教程 1.3】使用 BP-Net 深度补全网络,进行 KITTI 稠密点云和图像融合(Depth Completion 实战)

在上一节中,我们展示了如何将从激光雷达获取的稀疏点云(深度)映射到图像。因此这篇论文我们尝试使用 Depth Completion(深度补全)技术,来将稀释的点云深度,补全为稠密深度。

2401_87064292的博客 1200

Windows上MSYS2的安装和使用

MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在Windows上就没那么好用,比如ffmpeg,opencv等直接引用就行了,这个工具真的很省事。接下来带你们看看它的妙用。1、好好研究确实妙用无穷。

jiexijihe945的博客 4144

java JDK 11的新特性

java JDK 11的新特性

weixin_39439156的博客 3247

YOLO11涨点优化:注意力魔改 | 引入Deformable Attention (可变形注意力),灵活感受野自适应复杂形变目标

Deformable Attention为YOLO11带来的不仅是2.6个百分点的mAP提升,更是一种全新的“形变感知”范式。标准卷积的固定感受野在非刚性目标、多尺度变化和遮挡场景下力不从心——Deformable Attention恰好填补了这一空白。从架构设计到代码实现,从竞品对比到部署方案,从生态工具到安全风险,本文覆盖了将Deformable Attention引入YOLO11所需的全部知识链路。

2601_95807009的博客 286

【Java】JDK11特性概览

JDK 11是自JDK 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。下边看一下JDK 11的新特性。

颜淡慕潇 7924

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JDK11新特性

介绍jdk11的新特性,包括ZGC的出现,String,Stream和Optional的增强。

m0_62946761的博客 7634

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JDK 11下载、安装、配置

JDK 11下载、安装、配置

qq_26432153的博客 2万+

温度PID控制PLC程序

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

JDK11下载、安装与配置、运行第一个Java程序教程

DK11下载、安装与配置

u013083465的专栏 2万+

JDK 11: “JDK 11:稳定、可靠、兼容性优秀的Java开发工具包

作为Java开发者,我们经常需要依赖于稳定可靠的开发工具包来支持我们的项目。JDK 11作为Java生态系统中的一个重要版本,为我们带来了许多令人振奋的新特性和改进。本文将深入探讨JDK 11的各项特性,包括模块化系统、新的HTTP客户端、局部变量类型推断等,并分析其在实际开发中的应用场景和优势。JDK 11作为Java平台的一个重要版本,为Java开发者带来了许多新的特性和改进。模块化系统、新的HTTP客户端、局部变量类型推断等功能的引入,使得Java开发更加现代化、简洁和高效。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 6675

JDK11相比JDK1.8有哪些新特性

Java 11 相比 Java 8 引入了许多新的语言特性和 API,例如HTTP API的改进,包括对HTTP/2和WebSocket的支持,ZGC(可伸缩低延迟垃圾收集器)的引入,提供更好的大内存处理能力。

Ascend1977的博客 6395

JDK11 下载与安装、环境配置(全网最详情,值得收藏)

jdk11的安装和环境变量的配置,以及版本区别说明。

落雨敏 4万+

jdk11下载安装教程

Java11安装详细教程 Java11环境配置详细教程 JDK11安装详细教程 JDK11环境配置详细教程

qq_34484700的博客 8224

Java 11 新特性

Java 11 新特性

DevCampsite的博客 6577

JDK11 新特性详解

JDK11 新特性详解

雨陆聪辰的博客 7339
上一篇: 分布式作业 Elastic-Job-Lite 源码分析 —— 作业数据存储
下一篇: 深入分析 Session 和 Cookie
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值