java程序性能优化
对吃没兴趣
不要每次都是看到了希望才去坚持,很多时候可能是坚持了才会看到希望!!!
展开
-
【java--Stream流操作--实践总结】
Stream流实践//for循环 List<String> list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); AtomicInteger i = new AtomicInteger(); list.forEach(item -> { i.getAndIncrement();原创 2021-11-19 15:42:58 · 465 阅读 · 0 评论 -
并行程序开发及优化
本篇主要介绍基于java并行程序的开发及其优化方法,对于多核CPU,传统的串行程序已经无法很好的发挥CPU的性能,此时,就需要使用多线程并行的方式挖掘CPU的潜能。主要内容如下常用的多线程设计模式:如Future模式、Master-Worker模式、Guarded Suspeionsion模式、不变模式和生产者-消费者模式JDK内置多线程框架和各种线程池JDK内置并发的数据结构Jav...翻译 2019-08-07 16:31:23 · 589 阅读 · 0 评论 -
改善性能的技巧篇
慎用异常在java软件开发中,经常使用try-catch进行错误捕获异常,但是try-catch语句对系统性能而言是非常糟糕的,虽然再一次try-catch中无法察觉它带来的损失,但是,一旦try-catch语句被应用于循环中,就会给系统带来极大的伤害。使用局部变量调用方法时,传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等...翻译 2019-08-07 09:39:53 · 280 阅读 · 0 评论 -
引用类型
引用类型在java中提供了四个级别的引用,分别是强引用,软引用,弱引用,虚引用。在这四种引用级别中,只有强引用FinalReference类是包内可见的,其它三种引用类型,均为public。可以在应用程序内直接使用。强引用通过引用可以对堆中的对象进行操作,在某函数中,当创建了一个对象,该对象被分配在堆中,通过这个对象的引用,才能对这个对象进行操作。StringBuffer sb=new...翻译 2019-08-07 09:10:41 · 150 阅读 · 0 评论 -
一、字符串优化处理
字符串优化处理通常字符串对象或者与其等价的对象(char[]数组),在内存中,总是占据了最大的空间块,因此如何高效的处理字符串,必是提高系统整体性能的关键所在。String对象是java语言中重要的数据类型,但它并不是java基本的数据类型。在C语言中,对字符串的处理最通常的做法是使用char数组,但这种方式的弊端是显而易见的,数组本身无法封装字符串操作所需的基本方法。而在java语言中,S...翻译 2019-08-02 09:57:02 · 323 阅读 · 0 评论 -
使用NIO提升性能
使用NIO提升性能在软件系统中,由于I/O的速度要比内存慢,因此I/O读写在很多场合都会成为系统瓶颈,提升I/O速度对提升系统性能有着很大的好处。在java的标准I/O中,提供了基于流的I/O实现,即InputStream和OutputStream。这种基于流的实现,以字节为单位处理数据,并且非常容易建立各种过滤器。NIO就是New的I/O简称,它表示新一套的标准,具有以下特性:为所有...翻译 2019-08-05 17:55:05 · 220 阅读 · 0 评论 -
常用优化六、时间换空间和空间换时间
时间换空间由于系统资源是有限的,为了在有限的资源内,达成某些特定的性能目标,时间换空间或者空间换时间的方法。时间换空间通常用于嵌入式设备,或者内存、硬盘空间不足的情况,通过使用牺牲CPU的方式,获得原本需要更多内存或者硬盘空间才能完成的工作。下面是一个非常简单的时间换空间的算法,实现了a,b两个变量值的交换。交换两个变量的方法是使用一个中间变量,而引入额外的变量,而引入额外的变量意味着要使...翻译 2019-08-01 10:32:23 · 12418 阅读 · 0 评论 -
常用优化三、对象复用-池
对象复用-池对象池化,是目前非常常用的一种系统优化技术,它的核心思想是:如果一个类被频繁请求使用,那么不必每次都生成一个实例,可以将这个类的一些实例保存在一个“池”中,待需要使用的时候直接从池中获取。这个池就称为对象池,在实现细节上,它可能是一个数组,一个链表或者任何集合类。对象池的使用非常广泛,其中最为大家熟悉的,就是线程池和数据库连接池,线程池中保存着可以被重用的线程对象,当有任务被...翻译 2019-08-01 09:50:20 · 583 阅读 · 0 评论 -
常用优化二、缓存
缓存(cache)缓存也是为了提高系统性能而开辟的内存空间。缓存主要作用是暂存数据处理结果,并提供下次访问使用。在很多场合,数据的处理和数据的获取会非常费时,当对这个数据的请求量很大时,频繁的数据处理会耗尽CPU资源,缓存的作用就是将这些来之不易的数据处理结果暂存起来,当有其他线程或者客户端需要查询相同的数据资源时,可以省略对这些数据的处理流程,而直接从缓存中获取处理结构,并立即返回处理组件,...翻译 2019-08-01 09:31:09 · 220 阅读 · 0 评论 -
认识java性能
看懂程序的性能翻译 2019-07-26 17:25:15 · 164 阅读 · 0 评论 -
常用优化一、缓冲
缓冲(Buffer)缓冲区是一块特定的内存区域,开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能。比如生活中漏斗的例子:缓冲可以协调上层组件和下层组件的性能差,当上层组件优于下层组件时,可以有效的减少上层组件对下层组件的等待时间。而缓冲类似漏斗的功能,不需要等待下层组件真实的接受全部数据,即可返回操作,加快了上层组件的处理速度,从而提升系统总体性能。缓冲最常用的场景...翻译 2019-07-31 11:44:49 · 182 阅读 · 0 评论 -
五、观察者模式
观察者模式观察者模式是非常常用的一种设计模式,在软件系统中,当一个对象的行为依靠另一个对象的状态时,观察者模式就非常有用。若不使用观察者模式提供通用结构,而需要实现其类似的功能,则只能在另一个线程中不停监听对象所依赖状态,在一个复杂的系统中,可能会因此开启很多线程来实现这一功能,这将使系统的性能产生额外的负担。观察者模式的意义也就在于此,他可以在单线程中,使某一对象,及时得知自身所依赖的状态变...翻译 2019-07-31 11:00:22 · 107 阅读 · 0 评论 -
四、装饰者模式
装饰者模式装饰者模式拥有一个设计非常巧妙的结构,它可以动态添加对象功能,在基本的设计原则中,有一条重要的设计准则,叫做合成、聚合复用原则,根据该原则的思想,代码复用应该尽可能的使用委托,而不是使用继承,因为继承是一种紧密耦合,任何父类的改动都会影响子类,不利于系统维护,而委托则是松散耦合,只要接口不变,委托类的改动并不会影响其上层对象。装饰者模式就充分利用了这种思想,通过委托机制,复用系统中...翻译 2019-07-30 17:21:24 · 124 阅读 · 0 评论 -
三、享元模式
享元模式享元模式是设计模式中少数的几个以提高系统性能为目的的模式之一,它的核心思想是:如果在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次都使用都创建新的对象,在享元模式中,由于需要构造和维护这些可以共享的对象,因此会常常出现一个工厂类,用于维护和创建对象。享元模式对性能提升主要有两点:(1)可以节省重复创建对象的开销,因为被享元对象维护的相同对象只会被创建一次,...翻译 2019-07-30 15:48:22 · 114 阅读 · 0 评论 -
核心数据结构、集合优化
一、集合优化、List接口在这三种不同的实现中,ArrayList和Vector使用数组实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加、删除、插入新的元素或者数组的拓展和重定义。对ArrayList和Vector的操作,等价于对内部对象数据的操作。ArrayList和Vector几乎使用了相同的算法,它们的唯一区别是对多线程的支持,ArrayL...翻译 2019-08-02 17:48:25 · 168 阅读 · 0 评论 -
二、代理模式
静态代理代理模式也是一种很常见的设计模式。它使用代理对象完成用户请求,屏蔽用户对真实对象的访问,就如同现实中的代理一样,代理人被授权执行当事人的一些事宜,而无需当事人出面,从第三方角度来看,似乎当事人并不存在,因为它只和代理人通信。在软件设计上,使用代理模式的意图很多,比如因为安全原因,需要屏蔽客户端直接访问真实对象,或在远程调用中,需要代理类处理远程方法的调用技术细节,也可能为了提高系统性...翻译 2019-07-30 11:43:44 · 103 阅读 · 0 评论 -
一、单例模式
设计优化1.单例模式的使用和实现2.代理模式的实现和深入剖析3.享元模式的应用4.装饰着模式对性能组件的封装5.观察者模式的应用6.使用Value Object模式减少网络数据传输7.使用业务代理模式添加远程调用缓存8.缓冲和缓存的定义和使用9.对象池的使用场景及其基本实现10.构建负载均衡系统以及Terracoatta框架的简单使用11.时间换空间和空间换时间的基本思路...翻译 2019-07-29 17:41:48 · 118 阅读 · 0 评论