我就问下,用这些框架,会不会占宏观经济运行的框架内存

登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 二月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
Netty系列之Netty高性能之道
Netty系列之Netty高性能之道
97&他的粉丝
日. 估计阅读时间:
,人工智能、区块链、大数据、架构等领域海内外先驱实践!
亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的。
相关厂商内容
相关赞助商
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。
2. Netty高性能之道
2.1. RPC调用的性能模型分析
2.1.1. 传统RPC调用性能差的三宗罪
网络传输方式问题:传统的RPC框架或者基于RMI等方式的远程服务(过程)调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增大之后,同步阻塞IO会由于频繁的wait导致IO线程经常性的阻塞,由于线程无法高效的工作,IO处理能力自然下降。
下面,我们通过BIO通信模型图看下BIO通信的弊端:
图2-1 BIO通信模型图
采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,接收到客户端连接之后为客户端连接创建一个新的线程处理请求消息,处理完成之后,返回应答消息给客户端,线程销毁,这就是典型的一请求一应答模型。该架构最大的问题就是不具备弹性伸缩能力,当并发访问量增加后,服务端的线程个数和并发访问数成线性正比,由于线程是JAVA虚拟机非常宝贵的系统资源,当线程数膨胀之后,系统的性能急剧下降,随着并发量的继续增加,可能会发生句柄溢出、线程堆栈溢出等问题,并导致服务器最终宕机。
序列化方式问题:Java序列化存在如下几个典型问题:
1) Java序列化机制是Java内部的一种对象编解码技术,无法跨语言使用;例如对于异构系统之间的对接,Java序列化后的码流需要能够通过其它语言反序列化成原始对象(副本),目前很难支持;
2) 相比于其它开源的序列化框架,Java序列化后的码流太大,无论是网络传输还是持久化到磁盘,都会导致额外的资源占用;
3) 序列化性能差(CPU资源占用高)。
线程模型问题:由于采用同步阻塞IO,这会导致每个TCP连接都占用1个线程,由于线程资源是JVM虚拟机非常宝贵的资源,当IO读写阻塞导致线程无法及时释放时,会导致系统性能急剧下降,严重的甚至会导致虚拟机无法创建新的线程。
2.1.2. 高性能的三个主题
1) 传输:用什么样的通道将数据发送给对方,BIO、NIO或者AIO,IO模型在很大程度上决定了框架的性能。
2) 协议:采用什么样的通信协议,HTTP或者内部私有协议。协议的选择不同,性能模型也不同。相比于公有协议,内部私有协议的性能通常可以被设计的更优。
3) 线程:数据报如何读取?读取之后的编解码在哪个线程进行,编解码后的消息如何派发,Reactor线程模型的不同,对性能的影响也非常大。
图2-2 RPC调用性能三要素
2.2. Netty高性能之道
2.2.1. 异步非阻塞通信
在IO编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者IO多路复用技术进行处理。IO多路复用技术通过把多个IO的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源。
JDK1.4提供了对非阻塞IO(NIO)的支持,JDK1.5_update10版本使用epoll替代了传统的select/poll,极大的提升了NIO通信的性能。
JDK NIO通信模型如下所示:
图2-3 NIO的多路复用模型图
与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模式。阻塞模式使用非常简单,但是性能和可靠性都不好,非阻塞模式正好相反。开发人员一般可以根据自己的需要来选择合适的模式,一般来说,低负载、低并发的应用程序可以选择同步阻塞IO以降低编程复杂度。但是对于高负载、高并发的网络应用,需要使用NIO的非阻塞模式进行开发。
Netty架构按照Reactor模式设计和实现,它的服务端通信序列图如下:
图2-3 NIO服务端通信序列图
客户端通信序列图如下:
图2-4 NIO客户端通信序列图
Netty的IO线程NioEventLoop由于聚合了多路复用器Selector,可以同时并发处理成百上千个客户端Channel,由于读写操作都是非阻塞的,这就可以充分提升IO线程的运行效率,避免由于频繁IO阻塞导致的线程挂起。另外,由于Netty采用了异步通信模式,一个IO线程可以并发处理N个客户端连接和读写操作,这从根本上解决了传统同步阻塞IO一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。
2.2.2. 零拷贝
很多用户都听说过Netty具有&零拷贝&功能,但是具体体现在哪里又说不清楚,本小节就详细对Netty的&零拷贝&功能进行讲解。
Netty的&零拷贝&主要体现在如下三个方面:
1) Netty的接收和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行Socket读写,JVM会将堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝。
2) Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象,用户可以像操作一个Buffer那样方便的对组合Buffer进行操作,避免了传统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer。
3) Netty的文件传输采用了transferTo方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致的内存拷贝问题。
下面,我们对上述三种&零拷贝&进行说明,先看Netty 接收Buffer的创建:
图2-5 异步消息读取&零拷贝&
每循环读取一次消息,就通过ByteBufAllocator的ioBuffer方法获取ByteBuf对象,下面继续看它的接口定义:
图2-6 ByteBufAllocator 通过ioBuffer分配堆外内存
当进行Socket IO读写的时候,为了避免从堆内存拷贝一份副本到直接内存,Netty的ByteBuf分配器直接创建非堆内存避免缓冲区的二次拷贝,通过&零拷贝&来提升读写性能。
下面我们继续看第二种&零拷贝&的实现CompositeByteBuf,它对外将多个ByteBuf封装成一个ByteBuf,对外提供统一封装后的ByteBuf接口,它的类定义如下:
图2-7 CompositeByteBuf类继承关系
通过继承关系我们可以看出CompositeByteBuf实际就是个ByteBuf的包装器,它将多个ByteBuf组合成一个集合,然后对外提供统一的ByteBuf接口,相关定义如下:
图2-8 CompositeByteBuf类定义
添加ByteBuf,不需要做内存拷贝,相关代码如下:
图2-9 新增ByteBuf的&零拷贝&
最后,我们看下文件传输的&零拷贝&:
图2-10 文件传输&零拷贝&
Netty文件传输DefaultFileRegion通过transferTo方法将文件发送到目标Channel中,下面重点看FileChannel的transferTo方法,它的API DOC说明如下:
图2-11 文件传输 &零拷贝&
对于很多操作系统它直接将文件缓冲区的内容发送到目标Channel中,而不需要通过拷贝的方式,这是一种更加高效的传输方式,它实现了文件传输的&零拷贝&。
2.2.3. 内存池
随着JVM虚拟机和JIT即时编译技术的发展,对象的分配和回收是个非常轻量级的工作。但是对于缓冲区Buffer,情况却稍有不同,特别是对于堆外直接内存的分配和回收,是一件耗时的操作。为了尽量重用缓冲区,Netty提供了基于内存池的缓冲区重用机制。下面我们一起看下Netty ByteBuf的实现:
图2-12 内存池ByteBuf
Netty提供了多种内存管理策略,通过在启动辅助类中配置相关参数,可以实现差异化的定制。
下面通过性能测试,我们看下基于内存池循环利用的ByteBuf和普通ByteBuf的性能差异。
用例一,使用内存池分配器创建直接内存缓冲区:
图2-13 基于内存池的非堆内存缓冲区测试用例
用例二,使用非堆内存分配器创建的直接内存缓冲区:
图2-14 基于非内存池创建的非堆内存缓冲区测试用例
各执行300万次,性能对比结果如下所示:
图2-15 内存池和非内存池缓冲区写入性能对比
性能测试表明,采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右(性能数据与使用场景强相关)。
下面我们一起简单分析下Netty内存池的内存分配:
图2-16 AbstractByteBufAllocator的缓冲区分配
继续看newDirectBuffer方法,我们发现它是一个抽象方法,由AbstractByteBufAllocator的子类负责具体实现,代码如下:
图2-17 newDirectBuffer的不同实现
代码跳转到PooledByteBufAllocator的newDirectBuffer方法,从Cache中获取内存区域PoolArena,调用它的allocate方法进行内存分配:
图2-18 PooledByteBufAllocator的内存分配
PoolArena的allocate方法如下:
图2-18 PoolArena的缓冲区分配
我们重点分析newByteBuf的实现,它同样是个抽象方法,由子类DirectArena和HeapArena来实现不同类型的缓冲区分配,由于测试用例使用的是堆外内存,
图2-19 PoolArena的newByteBuf抽象方法
因此重点分析DirectArena的实现:如果没有开启使用sun的unsafe,则
图2-20 DirectArena的newByteBuf方法实现
执行PooledDirectByteBuf的newInstance方法,代码如下:
图2-21 PooledDirectByteBuf的newInstance方法实现
通过RECYCLER的get方法循环使用ByteBuf对象,如果是非内存池实现,则直接创建一个新的ByteBuf对象。从缓冲池中获取ByteBuf之后,调用AbstractReferenceCountedByteBuf的setRefCnt方法设置引用计数器,用于对象的引用计数和内存回收(类似JVM垃圾回收机制)。
2.2.4. 高效的Reactor线程模型
常用的Reactor线程模型有三种,分别如下:
1) Reactor单线程模型;
2) Reactor多线程模型;
3) 主从Reactor多线程模型
Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下:
1) 作为NIO服务端,接收客户端的TCP连接;
2) 作为NIO客户端,向服务端发起TCP连接;
3) 读取通信对端的请求或者应答消息;
4) 向通信对端发送消息请求或者应答消息。
Reactor单线程模型示意图如下所示:
图2-22 Reactor单线程模型
由于Reactor模式使用的是异步非阻塞IO,所有的IO操作都不会导致阻塞,理论上一个线程可以独立处理所有IO相关的操作。从架构层面看,一个NIO线程确实可以完成其承担的职责。例如,通过Acceptor接收客户端的TCP连接请求消息,链路建立成功之后,通过Dispatch将对应的ByteBuffer派发到指定的Handler上进行消息解码。用户Handler可以通过NIO线程将消息发送给客户端。
对于一些小容量应用场景,可以使用单线程模型。但是对于高负载、大并发的应用却不合适,主要原因如下:
1) 一个NIO线程同时处理成百上千的链路,性能上无法支撑,即便NIO线程的CPU负荷达到100%,也无法满足海量消息的编码、解码、读取和发送;
2) 当NIO线程负载过重之后,处理速度将变慢,这会导致大量客户端连接超时,超时之后往往会进行重发,这更加重了NIO线程的负载,最终会导致大量消息积压和处理超时,NIO线程会成为系统的性能瓶颈;
3) 可靠性问题:一旦NIO线程意外跑飞,或者进入死循环,会导致整个系统通信模块不可用,不能接收和处理外部消息,造成节点故障。
为了解决这些问题,演进出了Reactor多线程模型,下面我们一起学习下Reactor多线程模型。
Rector多线程模型与单线程模型最大的区别就是有一组NIO线程处理IO操作,它的原理图如下:
图2-23 Reactor多线程模型
Reactor多线程模型的特点:
1) 有专门一个NIO线程-Acceptor线程用于监听服务端,接收客户端的TCP连接请求;
2) 网络IO操作-读、写等由一个NIO线程池负责,线程池可以采用标准的JDK线程池实现,它包含一个任务队列和N个可用的线程,由这些NIO线程负责消息的读取、解码、编码和发送;
3) 1个NIO线程可以同时处理N条链路,但是1个链路只对应1个NIO线程,防止发生并发操作问题。
在绝大多数场景下,Reactor多线程模型都可以满足性能需求;但是,在极特殊应用场景中,一个NIO线程负责监听和处理所有的客户端连接可能会存在性能问题。例如百万客户端并发连接,或者服务端需要对客户端的握手消息进行安全认证,认证本身非常损耗性能。在这类场景下,单独一个Acceptor线程可能会存在性能不足问题,为了解决性能问题,产生了第三种Reactor线程模型-主从Reactor多线程模型。
主从Reactor线程模型的特点是:服务端用于接收客户端连接的不再是个1个单独的NIO线程,而是一个独立的NIO线程池。Acceptor接收到客户端TCP连接请求处理完成后(可能包含接入认证等),将新创建的SocketChannel注册到IO线程池(sub reactor线程池)的某个IO线程上,由它负责SocketChannel的读写和编解码工作。Acceptor线程池仅仅只用于客户端的登陆、握手和安全认证,一旦链路建立成功,就将链路注册到后端subReactor线程池的IO线程上,由IO线程负责后续的IO操作。
它的线程模型如下图所示:
图2-24 Reactor主从多线程模型
利用主从NIO线程模型,可以解决1个服务端监听线程无法有效处理所有客户端连接的性能不足问题。因此,在Netty的官方demo中,推荐使用该线程模型。
事实上,Netty的线程模型并非固定不变,通过在启动辅助类中创建不同的EventLoopGroup实例并通过适当的参数配置,就可以支持上述三种Reactor线程模型。正是因为Netty 对Reactor线程模型的支持提供了灵活的定制能力,所以可以满足不同业务场景的性能诉求。
2.2.5. 无锁化的串行设计理念
在大多数场景下,并行多线程处理可以提升系统的并发性能。但是,如果对于共享资源的并发访问处理不当,会带来严重的锁竞争,这最终会导致性能的下降。为了尽可能的避免锁竞争带来的性能损耗,可以通过串行化设计,即消息的处理尽可能在同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。
为了尽可能提升性能,Netty采用了串行无锁化设计,在IO线程内部进行串行操作,避免多线程竞争导致的性能下降。表面上看,串行化设计似乎CPU利用率不高,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队列-多个工作线程模型性能更优。
Netty的串行化设计工作原理图如下:
图2-25 Netty串行化工作原理图
Netty的NioEventLoop读取到消息之后,直接调用ChannelPipeline的fireChannelRead(Object msg),只要用户不主动切换线程,一直会由NioEventLoop调用到用户的Handler,期间不进行线程切换,这种串行化处理方式避免了多线程操作导致的锁的竞争,从性能角度看是最优的。
2.2.6. 高效的并发编程
Netty的高效并发编程主要体现在如下几点:
1) volatile的大量、正确使用;
2) CAS和原子类的广泛使用;
3) 线程安全容器的使用;
4) 通过读写锁提升并发性能。
如果大家想了解Netty高效并发编程的细节,可以阅读之前我在微博分享的《多线程并发编程在 Netty 中的应用分析》,在这篇文章中对Netty的多线程技巧和应用进行了详细的介绍和分析。
2.2.7. 高性能的序列化框架
影响序列化性能的关键因素总结如下:
1) 序列化后的码流大小(网络带宽的占用);
2) 序列化&反序列化的性能(CPU资源占用);
3) 是否支持跨语言(异构系统的对接和开发语言切换)。
Netty默认提供了对Google Protobuf的支持,通过扩展Netty的编解码接口,用户可以实现其它的高性能序列化框架,例如Thrift的压缩二进制编解码框架。
下面我们一起看下不同序列化&反序列化框架序列化后的字节数组对比:
图2-26 各序列化框架序列化码流大小对比
从上图可以看出,Protobuf序列化后的码流只有Java序列化的1/4左右。正是由于Java原生序列化性能表现太差,才催生出了各种高性能的开源序列化技术和框架(性能差只是其中的一个原因,还有跨语言、IDL定义等其它因素)。
2.2.8. 灵活的TCP参数配置能力
合理设置TCP参数在某些场景下对于性能的提升可以起到显著的效果,例如SO_RCVBUF和SO_SNDBUF。如果设置不当,对性能的影响是非常大的。下面我们总结下对性能影响比较大的几个配置项:
1) SO_RCVBUF和SO_SNDBUF:通常建议值为128K或者256K;
2) SO_TCPNODELAY:NAGLE算法通过将缓冲区内的小封包自动相连,组成较大的封包,阻止大量小封包的发送阻塞网络,从而提高网络应用效率。但是对于时延敏感的应用场景需要关闭该优化算法;
3) 软中断:如果Linux内核版本支持RPS(2.6.35以上版本),开启RPS后可以实现软中断,提升网络吞吐量。RPS根据数据包的源地址,目的地址以及目的和源端口,计算出一个hash值,然后根据这个hash值来选择软中断运行的cpu,从上层来看,也就是说将每个连接和cpu绑定,并通过这个hash值,来均衡软中断在多个cpu上,提升网络并行处理性能。
Netty在启动辅助类中可以灵活的配置TCP参数,满足不同的用户场景。相关配置接口定义如下:
图2-27 Netty的TCP参数配置定义
通过对Netty的架构和性能模型进行分析,我们发现Netty架构的高性能是被精心设计和实现的,得益于高质量的架构和代码,Netty支持10W TPS的跨节点服务调用并不是件十分困难的事情。
3. 作者简介
李林锋,2007年毕业于东北大学,2008年进入华为公司从事高性能通信软件的设计和开发工作,有6年NIO设计和开发经验,精通Netty、Mina等NIO框架。Netty中国社区创始人,《Netty权威指南》作者。
联系方式:新浪微博 Nettying 微信:Nettying
感谢对本文的审校,对本文的策划。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博()或者腾讯微博()关注我们,并与我们的编辑和其他读者朋友交流。
Author Contacted
语言 & 开发
292 他的粉丝
架构 & 设计
697 他的粉丝
0 他的粉丝
Performance
1 他的粉丝
1 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
Re: 采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右
支持,需要深入了解netty
Re: 支持,需要深入了解netty
Re: node.js
Re: node.js
Re: node.js
不好意思,刚才点击回复没有反应,我连续点了多次,没想到竟然重复发了5份,杯具啊。
Re: 求推荐
对于“Reactor主从多线程模型”不太理解
做为客户端 使用socket短链接有必要使用NIO吗?
Re: 对于“Reactor主从多线程模型”不太理解
Re: 做为客户端 使用socket短链接有必要使用NIO吗?
Re: 采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右
Re: 采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右
Re: 采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右
Re: 采用内存池的ByteBuf相比于朝生夕灭的ByteBuf,性能高23倍左右
关注netty几个月了,看到这篇文章解惑了
netty5小版本切换引发的问题
netty5小版本切换引发的问题
netty5小版本切换引发的问题
netty5小版本切换引发的问题
netty5小版本切换引发的问题
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
建立连接后,第一次发送消息比较慢
Re: 对于“Reactor主从多线程模型”不太理解
Re: 建立连接后,第一次发送消息比较慢
夜行侠老师的netty源码分析视频
Re: 对于“Reactor主从多线程模型”不太理解
Netty物联网高并发系统第一季
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
InfoQ.com及所有内容,版权所有 ©
C4Media Inc. InfoQ.com 服务器由 提供, 我们最信赖的ISP伙伴。
极客邦控股(北京)有限公司
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。ssh框架下tomcat占内存一直上升正常吗?_百度知道
ssh框架下tomcat占内存一直上升正常吗?
我有更好的答案
这个一般得看下程序才知道的,具体内存使用情况得分析多方面,大部分是由于程序内部问题导致,我们有学习小组也
希望一起学习进步 Java框架平台研发 378 437
好,谢谢。这是QQ号吗
问题已找到了,确定是程问题。
一起学习,进步
采纳率:47%
来自团队:
一般来说tomcat的运行所占内存就是大部分是jvm所占的内存,如果内存一直在上升说明你的程序一直在新开线程检查下是不是哪里有死循环了
谢谢,问题找到了,是程序内部问题
请问大概是什么原因呢
去问专业维修人员
请问大概是什么原因呢
注解声明事务方式。在dao方法中用的是getcurrentsession。
这个……对不起,我不知道,我朋友出现过这个问题,至于她是怎么弄好的我就不知道了!不好意思啦!
没事,谢谢了
不好意思,没跟你帮上什么忙!
回复就是帮助,很高兴了。谢谢!
嗯!祝你早日得到解决!
谢谢,找到原因后和你再告你,一起分享
嗯!谢谢!
递增/,因为重新创建一个新的进程也是要有一定开销的
其他2条回答
为您推荐:
其他类似问题
ssh框架的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)您好,请问一下,360浏览器内存占用过高,经常这样,是什么问题?谢谢
全部答案(共2个回答)
浏览器选项-→框架和增强-→优化性能选项中勾选优化CPU和内存占用
请认准官网唯一指定客服QQ:▓▓
【业务范围】:
1.查询微信QQ陌陌的聊天记录!
2.破解找回手机微信手机QQ陌陌的账号密码!
3.恢复删除的微信QQ陌陌的聊天记录!
4.查询历史通话记录!
5.查看历史短信内容!
6.恢复已被删除的信息!
7.查询酒店开房记录,监控定位跟踪找人!
8.盛大游戏,QQ游戏,CF帐号游戏装备找回!
专业做破解QQ密码查询,破解微信密码查询,,微信聊天记录查询,QQ聊天记录查询,微信记录删除与恢复,QQ记录删除与恢复,删除微信聊天记录,删除QQ聊天记录,开房记录查询与删除,删除开房记录,删除手机通话记录通话清单,查询手机通话记录,手机通话清单查看,删除手机短信内容,恢复删除短信内容,短信内容删除全国各种手机,婚外情调查,婚姻调查,家庭纠纷调查,情感调查,手机通话内容查询,定位找人,GPS定位跟踪,微信聊天记录查询,QQ聊天记录查询,微信记录删除与恢复,QQ记录删除与恢复,删除微信聊天记录,删除QQ聊天记录,开房记录查询与删除,删除开房记录,删除手机通话记录通话清单,查询手机通话记录,手机通话清单查看,删除手机短信内容,恢复删除短信内容,短信内容删除全国各种手机,婚外情调查,婚姻调查,家庭纠纷调查,情感调查,手机通话内容查询,定位找人,GPS定位跟踪,手机全面定位,陌陌密码查询,陌陌聊天记录查询,陌陌聊天记录查询,陌陌记录删除与恢复!
微信 (WeChat) 是腾讯公司于日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、”公众平台“、”语音记事本“等服务插件。支持通过QQ号来导入现有的联系人资料,但仅有即时通讯、分享照片和更换头像等简单功能。微信逐渐增加了对手机通讯录的读取、与腾讯微博私信的互通以及多人会话功能的支持,截至2011年4月底,腾讯微信获得了四五百万注册用户,微信新增了Talkox那样的语音对讲功能。微信添加了“查看附近的人”的陌生人交友功能。微信发布3.0版本,该版本加入了“摇一摇”和漂流瓶功能,增加了对繁体中文语言界面的支持,并增加港、澳、台、美、日五个地区的用户绑定手机号。微信发布4.0版本。这一版本增加了类似Path和Instagam一样的相册功能,并且可以把相册分享到朋友圈。微信4.2版本增加了视频聊天插件,并发布网页版微信界面。微信4.3版本增加了摇一摇传图功能,该功能可以方便的把图片从电脑传送到手机上。这一版本还新增了语音搜索功能,并且支持解绑手机号码和QQ号,进一步增强了用户对个人信息的把控。微信发布4.5版。这一版本支持实时对讲和多人实时语音聊天,并进一步丰富了“摇一摇”和二维码的功能,支持对聊天记录进行搜索、保存和迁移。同时,微信4.5还加入了语音提醒和根据对方发来的位置进行导航的功能。有大量用户反映微信发生全面故障,故障包括微信信息无法发出、无法刷新朋友圈、无法登陆公众账号平台、无法连接微信网页版。微信5.0 fo ios上线了,添加了表情商店和游戏中心,扫一扫(简称313)功能全新升级,可以扫街景、扫条码、扫二维码、扫单词翻译、扫封面。微信5.0 fo Windows Phone上线了 ,添加了表情商店,绑定银行卡,收藏功能,绑定邮箱,分享信息到朋友圈等功能。开放微信支付功能。电脑管家牵手微信上线聊天记录备份功能。微信在App Stoe率先上线了6.1版,新版增加了“附件栏发微信红包”、“更换手机时,自定义表情不会丢失”、“可以搜索朋友圈的内容和附近的餐馆”三大功能。还有安装之后的开场幻灯片。聊天:支持发送语音短信、视频、图片(包括表情)和文字,是一种聊天软件,支持多人群聊(最高40人,100人和200人的群聊正在内测)。添加好友:微信支持查找微信号(具体步骤:点击微信界面下方的朋友们—>添加朋友—>搜号码,然后输入想搜索的微信号码,然后点击查找即可)、查看QQ好友添加好友、查看手机通讯录和分享微信号添加好友、摇一摇添加好友、二维码查找添加好友和漂流瓶接受好友等7种方式。实时对讲机功能:用户可以通过语音聊天室和一群人语音对讲,但与在群里发语音不同的是,这个聊天室的消息几乎是实时的,并且不会留下任何记录,在手机屏幕关闭的情况下也仍可进行实时聊天。微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。微信支付向用户提供安全、快捷、高效的支付服务,以绑定银行卡的快捷支付为基础。用户只需在微信中关联一张银行卡,并完成身份认证,即可将装有微信app的智能手机变成一个全能钱包,之后即可购买合作商户的商品及服务,用户在支付时只需在自己的智能手机上输入密码,无需任何刷卡步骤即可完成支付,整个过程简便流畅。微信支付支持以下银行发卡的贷记卡:深圳发展银行、宁波银行。此外,微信支付还支持以下银行的借记卡及信用卡:招商银行、建设银行、光大银行、中信银行、农业银行、广发银行、平安银行、兴业银行、民生银行。1、绑定银行卡时,需要验证持卡人本人的实名信息,即{姓名,身份证号}的信息。2、一个微信号只能绑定一个实名信息,绑定后实名信息不能更改,解卡不删除实名绑定关系。3、同一身份证件号码只能注册最多10个(包含10个)微信支付;4、一张银行卡(含信用卡)最多可绑定3个微信号;5、一个微信号最多可绑定10张银行卡(含信用卡);6、一个微信帐号中的支付密码只能设置一个;7、银行卡无需开通网银(中国银行、工商银行除外),只要在银行中有预留手机号码,即可绑定微信支付。注:一旦绑定成功,该微信号无法绑定其他姓名的银行卡信用卡,请谨慎操作。
他们有严格的保密制度和较丰富的经验,尽力完善你一切的要求,请放心选择他们。联邦、保密、高效是他们的服务宗旨,欢迎咨询联系QQ: 了解更多 该团队向每一个需要调查的委托人郑重承诺 保证对委托人所提的一切线索严格保密,不与任何人透露有关委托方的任何情况及委托方相关的信息,调查终结后将所有资料 删除不留备份,提问者评价非常感谢你!
球阀是化工厂常用的阀门,它的优点一般是好操作;截止阀主要的作用是在于调节流量和压力。功能和侧重点不同,要求不高时候可以应急,互换不可以。需要调节流量,压力时,一...
资讯广告跳出来的时候,任务管理器打开文件位置,你已经锁定了这个文件,那么把这个文件相关的进程关掉。
打开360浏览器,在下面找到一个带十字架
点击它,然后会出现一个面板,选择一键修复,
在出现的面板上,选择你要修复的问题,也可以不选择,点击立即修复,等修复...
视界的视频怎么下载
找开360浏览器--工具-----360安全浏览器选项----找到左铡的“框架和增强”----然后勾选右刚的防假死选项
答: 微信人工拉票据难易程度不同,0.2-0.4元1条。既然是验证,最怕的就是用户失真,有两点需要强调下。
  榜首,不要花钱。因为花钱拉来的用户往往意图不纯,终究导...
答: 要看是什么网络电话软件 KC与SKY 很多网络电话 1毛一分钟(全国) 1-7点免费打
答: 你说的可是把电脑变为wifi,首先你的电脑得支持无线网才可以,如果你的电脑有无线网卡那就可以,我给腾讯电脑管家提过这个建议,腾讯没有做,360做了,360安全卫...
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415

我要回帖

更多关于 前端框架占比 的文章

 

随机推荐