java对象内存的存储

Java基础 | 对象在内存中的存储布局以及如何计算对象的大小 文章目录总结图Java 内存结构第一部分:对象头第二部分:实例数据第三部分:对齐填充参考资料 总结图 Java 内存结构 第一部分:对象头 markword:用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁等。这部分数据长度在32位机器和64位机器虚拟机中分别为4字节和8字节(64位的JVM为了节约内存可以使用选项+UseCompressedOops开启指针压缩... 阅读详情

(此次纯属做笔记,有错误请评论,谢谢大家)
1 对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。
对象的具体信息保存在堆中。常量池的速度是最快的。
常量包括两个:一个是直接定义的string,一个是final类型的变量
常量池:string s = “aa”; final int s = 9;
栈中:int a = 5;
2 对于成员变量和局部变量:
成员变量就是方法外部,类的内部定义的变量,可以不用初始化;
局部变量就是方法或者语句块内部定义的变量,局部变量必须要初始化。
形式参数指的是方法参数列表中的变量,他是局部变量。
局部变量的数据存在于栈中,栈内存中的局部变量随着方法的完成而消失。
成员变量存储在中的对象里面,由垃圾回收器负责回收。

3 String str = “abc”;–创建对象的过程
1)首先在常量池中查找是否存在内容为“abc”的字符串对象
2)如果不存在,则在常量池中创建“abc”,并让str引用该对象
3)如果存在,则直接让str引用该对象
String str = new String(“abc”)–创建对象的过程
1)首先在堆中创建一个指定的对象“abc”,并让str引用指向该对象
2)在字符串常量池中查看,是否存在内容为“abc”的字符串对象
3)如果存在,则将new出来的字符串对象与字符串常量池中的对象联系起来
4)如果不存在,则在字符串常量池中创建一个内容为“abc”的字符串对象,并将堆中的对象与之联系起来。

String str = new String(“abc”);会产生几个对象?
一个或两个。如果常量池中原来没有“abc”,就是两个,如果常量池中有”abc“,就是一个;

4 对于int i=2,j=2;
首先会在栈中创建一个变量为i的引用,然后查找有没有字面值为2的地址, 没有的话就会开辟一个存在2这个字面值的地址,然后将i指向2的地址。对于int j同样 查找有没有字面值为2的地址,如果有的话,也是将2的地址指向j,这样就会出现
同时指向2的两个变量。

Integer it1 = 2,it2 = 2;Integer it1 = 250,it2 = 250;
java的自动拆箱和装箱
在自动装箱的时候,把int变为Integer的时候,存在一定的规则,当int的值在-128到127时, 返回的不是一个新new出来的Integer对象,而是一个已经缓存在堆中的Integer对象,(系统 已经把-128到127之间的Integer缓存到一个Integer数组中去了) 。
当装箱的时候,首先去缓存中找,如果找到的话就直接返回引用,不用new,如果不在
-128-127中间,会返回一个新new出来的Integer对象。
Integer it1 = 2;
Integer it2 = 2;
it1==it2;//返回值true
Integer it1 = 128;
Integer it2 = 128;
it1==it2;//返回值false
Integer it1 = new Integer(2);
Integer it2 = new Integer(2);
it1==it2;//返回值false

java 对象在内存中的结构 本文讲解了java对象在内存中的结构。 建议有c,汇编语言基础的同事学习,如果想深入理解java语言,看看这个。 立即下载

相关推荐

数学建模入门——数据预处理(全)

介绍了数据预处理的入门知识

n04j04h06的博客 4347

Java对象在内存中的存储布局?

同时,了解Java对象在内存中的存储布局对于开发者来说非常重要,可以帮助他们更好地理解对象的属性和行为,提高程序的稳定性和性能。1. 动态性:Java对象在内存中的存储布局是动态的,可以根据不同的对象类型和场景进行不同的布局。1. 对象头(Object Header):这是Java对象在内存中的头部区域,包含了对象的类型信息、垃圾回收标记等信息。3. 字段元数据区:这是Java对象中用于描述对象字段信息的区域,包含了对象的字段信息、字段的访问权限、字段的类型等信息。三、Java对象内存布局的特点。

searchboy2025的博客 148

Token验证绕过 靶场实战

实验介绍 1.漏洞简介 在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。 具有以下几点特性: 1)无状态、可扩展 2)支持移动设备 3)跨程序调用 4)安全 2.原理基于Token的验证原理 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。 NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是...

weixin_54771278的博客 2251

对象如何存储在Java中?

每个线程在JVM中都有一个私有的栈,用于存储该线程的方法调用和执行的信息,这包括局部变量、操作数栈、动态链接、方法出口信息等。方法被调用时,JVM会在调用线程的栈上创建一个新的栈帧,用于存储该方法的局部变量表和操作数栈等信息。本身并不存储对象的数据,它只是一个引用,指向存储在堆内存中的对象。当没有任何引用指向一个对象时,JVM的垃圾回收器就可以安全地回收这个对象占用的内存空间。在Java中,对象存储在堆内存中。每个对象都包含一些信息,比如对象的类型(即类),以及对象的状态(即类的实例变量)。

蜗牛Clear的博客 698

手把手教你构建轻量级CLIP模型:从理论到实践

本文手把手教你从零构建一个轻量级CLIP模型,深入解析其核心原理——对比学习,并提供完整的代码实践。通过精简的模型架构、数据准备和训练循环实现,帮助读者彻底理解多模态模型如何让图像与文本在共享空间中对齐,为学习更复杂的AI模型打下坚实基础。

weixin_29100927的博客 326

设计空间探索:乘法器设计的面积、延时、功耗优化

4-2压缩器在减少延迟方面表现出色,适用于需要快速压缩的场景。6-2压缩器在资源占用方面具有优势,能够减少压缩树的层次数量和逻辑门数量。优化功耗:通过合理组合不同类型的压缩器,可以在延迟、资源占用和功耗之间找到最佳平衡点,从而实现优化的设计目标。###参考资料。

SiArch的博客 1881

(2)Java 中对象在内存中时如何存储的

Java 中对象在内存中时如何存储的

zjj_flower的博客 582

Qt for WebAssembly环境搭建

一、前言 二、Ubuntu 1、在线安装Qt15 在线安装下载器:https://download.qt.io/official_releases/online_installers/ 安装时记得勾选WebAssembly,如下: 2、安装依赖 # Install Python sudo apt-get install python2.7 # Install CMake (optional, only needed for tests and building Binaryen) sudo apt

贝勒里恩的博客 3670

【教3妹学java】10.Java对象在内存中是怎样存储的?

3妹:“去吗 去啊 以最卑微的梦,战吗 战啊 以最孤高的梦, 致那黑夜中的呜咽与怒吼, 谁说站在光里的才算英雄” 2哥:没想到3妹不仅是王心凌女孩,还是孤勇者女孩啊,厉害的👍。 3妹:那是,我很有音乐天赋的,小时候还获得过我们村少儿歌唱大赛一等奖呢,哈哈哈哈~ 2哥:别说,还真是挺好听的。 3妹:以后要是失业了,说不定我就转行当歌手了呢。 2哥:呦,还骄傲上了,你离歌手还是差远了呀。咱们还是先把技术学好,失业的可能性就相对比较小了嘛。 2哥:今天我们接着来学习JVM的知识。对象在内存中存储布局主要分为对象.

kangbin825的专栏 1431

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

子网掩码: 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址如下图。

快乐江湖的博客 1349

Python 爬虫实战:知网论文数据爬取(题录 / 摘要 / 引用提取 + Excel 结构化)

在学术研究中,获取准确且全面的文献数据是至关重要的。知网(CNKI)作为国内最大的学术文献数据库,拥有海量的论文资源。通过 Python 爬虫技术,我们可以高效地从知网爬取论文数据,包括题录、摘要和引用信息,并将这些数据结构化存储到 Excel 文件中,方便后续的学术分析和研究。

yansideyucsdn的博客 1749

Java 里的对象在虚拟机里面是怎么存储的?

Java 对象在虚拟机中主要以“对象头 + 实例数据 + 对齐填充”的形式存于堆(或栈,经逃逸分析优化 ),对象头记录身份与状态,实例数据存业务字段,对齐填充保证内存规整。理解这一存储布局,对分析内存泄漏、锁优化(如 synchronized 基于对象头的 Mark Word 实现 )等问题至关重要。

weixin_43521001的博客 424

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

java对象在内存中的存储情况

java对象在内存中的存储情况: 对

qq_19711059的博客 831

lwip-2.0.3

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java 对象在内存中的存储

Java中  强调:  一切都是对象  尽管如此  但是操纵的标识符实际上是对象的一个引用   借用THINKING IN JAVA 书中的例子 : 对象作为电视机   引用就作为遥控器    只要握有这个遥控器  就可以保持与电视机的联系   当想改变频道时   实际上操纵的是遥控器, 再由遥控器来调控电视机(对象) 此外 ,引用也可以独立存在,如: String sl;

qq_26331127的博客 1830

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java对象在堆内存中的存储布局

对象标记Mark Word:64位系统中占8个字节,存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄(Generation Age)、锁状态标志(Lock Status)、线程持有的锁、偏向锁ID(Biased Lock ID)、线程ID(Thread ID for Synchronized)等。字段可以是基本类型(如int, double等),也可以是指向堆中其他对象的引用(即对象的地址),还可以是指向方法区中的常量池的引用。如果对象是数组,对象头中还有记录数组长度的数据。

deku_的博客 395

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java对象在内存中的存储布局

Java对象在内存中的存储布局

m0_62727518的博客 846

java对象内存存储

JAVA内存中堆与栈的区别区分 在函数中定义的一些基本类型的变量和对象引用都是在函数的堆栈内存中分配 堆内存用于存放由new创建的对象和数组 在堆内存中分配的内存,由java虚拟机自动垃圾回收来管理。在堆内存中产生了一个数组或对象后,还可以在栈内存中定义一个变量,这个变量可以作为数组或对象的应用变量,在程序使用过程中就可以通过引用变量来来访问堆内存中的数组和对象。java中对象的引用及

鱼仔仔仔真的不想改bug 516

【java】对象的内存存储

创建类的多个对象时,每个对象在堆空间中有一个对象实体。每个对象实体中保存着一份类的属性。如果修改了某个对象的属性值时,不会影响其他对象此属性的值。此时p1、p3两个变量指向了堆空间的同一个对象实体。如果通过齐总某一个对象变量修改对象的属性时,会导致另一个对象变量此属性的值。强调1:创建了Person类的两个对象。强调2、声明类的两个变量。

weixin_45746689的博客 382

Java--对象在内存中的存储布局

普通对象在内存中的存储布局: 由 markword 和 class pointer 字段组成了对象头。 其中 markword 占 8bytes,包括锁信息,hashcode 和 GC; class pointer 占 4bytes,指向了Object.class,返回对象的类型信息; instance data 即成员变量,例如: class person{ String name = "zhang san" ; int age ; boolean gender ; //是否为男性 } pers

qq_45014208的博客 803

java对象底层原存储结构图解_Java对象在内存中的存储结构图解

Java对象在内存中的存储结构图解Java对象在内存中的存储结构图解public class TestStudent {public static void main(String[] args) {int n = 10; //栈存储int m = 10; //栈存储Student stu = new Student();//属性赋值stu.name="张三";System.out.print...

weixin_29196891的博客 358

Java对象在内存中存储布局及大小

对象在内存中的存储布局 关于该问题需要拆分为两种情况分析: 普通对象: 对象头markword: 8个字节 Class pointer: 属于哪个class,-XX:+UseCompressedClassPointers 为4字节,否则为8字节。 实例数据InstantData: 引用类型: -XX:+UseCompressOops 开启则占4字节,否则占8字节 对齐填充Padding:保证对象的大小为8的整数倍。 数组对象: markword: 8个字节 class po

leofee的博客 387

Java对象在内存中存储结构

目录Java对象存储:(HOTSPOT虚拟机)什么是对象头,具体包括什么Mark Word分析 (64位):Class Pointer (类型指针)array length(数组特有)实例数据(Instance)对其填充(padding)如何获取的元数据通过句柄访问对象(间接)通过Reference指针直接访问对象(直接)对象的基本存储方式: Java对象存储:(HOTSPOT虚拟机) 一个Java对象可以分为三部分存储在内存中,分别是: 对象头Object Header 实例数据Instance 对齐填

java_cG的博客 1508

java对象在内存中如何存储_关于对象头引发的思考,对象在内存中是如何存储的...

今天在看并发编程这本书的时候,看到了对象头这一名词(如下图所示),这是我第一次接触这个概念,或是说第一次留意到这个概念,这不仅引起了我的深思,对象到底是以何种形式存储在内存中呢首先,我上网搜了一下对象在内存中的存储结构,经过筛选得到这样一张图,了解到对象的内存结构包括对象头(MarkWord,类指针,数组长度),实例数据,对齐(为了加快访问速度,java对象的大小必然是8的整数倍)三个部分。下面直...

weixin_42507981的博客 356

Java面向对象基础-2. 分析对象在内存中的存储

Java面向对象基础-2. 分析对象在内存中的存储 单个对象内存图 多个对象内存图 多个对象指向相同内存图 总结 当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的) 只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。 ...

qq_45885580的博客 170

java对象在内存中的存储

java对象存储总结一.存储位置我们要对java对象不同的存储位置都有一定了解,会对后续学习有很大帮助。(以下来自java编程思想2.2)1.寄存器:最快的存储区,因为它和其它存储器位于不同位置——处理器内部。缺点是其数量极其有限,需要按需分配。不能被你控制和察觉(就是不用管)。2.堆栈:一般就叫栈。位于通用RAM(随机访问存储器)中。可以通过堆栈指针从处理器那里获得直接支持(堆栈指针向下移动,分...

qq_26461261的博客 2550
上一篇: canvas实现简单的画图功能
下一篇: 鼠标悬停,图片向四周放大效果
烂笔头NI
博客等级 码龄9年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值