Java性能优化技术集锦

本文全文转载自:http://wangning371.iteye.com/blog/441472

一、通用篇
  1.1 不用new关键词创建类的实例
  1.2 使用非阻塞I/O
  1.3 慎用异常
  1.4 不要重复初始化变量
  1.5 尽量指定类的final修饰符
  1.6 尽量使用局部变量
  1.7 乘法和除法
二、J2EE篇
  2.1 使用缓冲标记
  2.2 始终通过会话Bean访问实体Bean
  2.3 选择合适的引用机制
  2.4 在部署描述器中设置只读属性
  2.5 缓冲对EJB Home的访问
  2.6 为EJB实现本地接口
  2.7 生成主键
  2.8 及时清除不再需要的会话
  2.9 在JSP页面中关闭无用的会话
  2.10 Servlet与内存使用
  2.11 HTTP Keep-Alive
  2.12 JDBC与Unicode
  2.13 JDBC与I/O
  1.14 内存数据库

===================================
正文:
===================================
一、通用篇

“通用篇”讨论的问题适合于大多数Java应用。

1.1 不用new关键词创建类的实例

用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:


public static Credit getNewCredit() {
return new Credit();
}

 

改进后的代码使用clone()方法,如下所示:


private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}

 

上面的思路对于数组处理同样很有用。

1.2 使用非阻塞I/O

版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞,一些应用采用了创建大量线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发I/O流的应用中见到,如Web服务器、报价和拍卖应用等。然而,创建Java线程需要相当可观的开销。

JDK 1.4引入了非阻塞的I/O库(java.nio)。如果应用要求使用版本较早的JDK,在这里有一个支持非阻塞I/O的软件包。

请参见Sun中国网站的《调整Java的I/O性能》。

1.3 慎用异常

异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。

异常只能用于错误处理,不应该用来控制程序流程。

1.4 不要重复初始化变量

默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变可柚贸?.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。

1.5 尽量指定类的final修饰符

带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。

另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

1.6 尽量使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。

1.7 乘法和除法

考虑下面的代码:


for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }

 

用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码:


for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

 

修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。

二、J2EE篇

前面介绍的改善性能技巧适合于大多数Java应用,接下来要讨论的问题适合于使用JSP、EJB或JDBC的应用。

2.1 使用缓冲标记

一些应用服务器加入了面向JSP的缓冲标记功能。例如,BEA的WebLogic Server从6.0版本开始支持这个功能,Open Symphony工程也同样支持这个功能。JSP缓冲标记既能够缓冲页面片断,也能够缓冲整个页面。当JSP页面执行时,如果目标片断已经在缓冲之中,则生成该片断的代码就不用再执行。页面级缓冲捕获对指定URL的请求,并缓冲整个结果页面。对于购物篮、目录以及门户网站的主页来说,这个功能极其有用。对于这类应用,页面级缓冲能够保存页面执行的结果,供后继请求使用。

对于代码逻辑复杂的页面,利用缓冲标记提高性能的效果比较明显;反之,效果可能略逊一筹。

请参见《用缓冲技术提高JSP应用的性能和稳定性》。

2.2 始终通过会话Bean访问实体Bean

直接访问实体Bean不利于性能。当客户程序远程访问实体Bean时,每一个get方法都是一个远程调用。访问实体Bean的会话Bean是本地的,能够把所有数据组织成一个结构,然后返回它的值。

用会话Bean封装对实体Bean的访问能够改进事务管理,因为会话Bean只有在到达事务边界时才会提交。每一个对get方法的直接调用产生一个事务,容器将在每一个实体Bean的事务之后执行一个“装入-读取”操作。

一些时候,使用实体Bean会导致程序性能不佳。如果实体Bean的唯一用途就是提取和更新数据,改成在会话Bean之内利用JDBC访问数据库可以得到更好的性能。

2.3 选择合适的引用机制

在典型的JSP应用系统中,页头、页脚部分往往被抽取出来,然后根据需要引入页头、页脚。当前,在JSP页面中引入外部资源的方法主要有两种:include指令,以及include动作。


include指令:例如<%@ include file="copyright.html" %>。该指令在编译时引入指定的资源。在编译之前,带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定,比运行时才确定资源更高效。
include动作:例如<jsp:include page="copyright.jsp" />。该动作引入指定页面执行后生成的结果。由于它在运行时完成,因此对输出结果的控制更加灵活。但时,只有当被引用的内容频繁地改变时,或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算。
2.4 在部署描述器中设置只读属性

实体Bean的部署描述器允许把所有get方法设置成“只读”。当某个事务单元的工作只包含执行读取操作的方法时,设置只读属性有利于提高性能,因为容器不必再执行存储操作。

2.5 缓冲对EJB Home的访问

EJB Home接口通过JNDI名称查找获得。这个操作需要相当可观的开销。JNDI查找最好放入Servlet的init()方法里面。如果应用中多处频繁地出现EJB访问,最好创建一个EJBHomeCache类。EJBHomeCache类一般应该作为singleton实现。

2.6 为EJB实现本地接口

本地接口是EJB 2.0规范新增的内容,它使得Bean能够避免远程调用的开销。请考虑下面的代码。


PayBeanHome home = (PayBeanHome)
javax.rmi.PortableRemoteObject.narrow
(ctx.lookup ("PayBeanHome"), PayBeanHome.class);
PayBean bean = (PayBean)
javax.rmi.PortableRemoteObject.narrow
(home.create(), PayBean.class);


第一个语句表示我们要寻找Bean的Home接口。这个查找通过JNDI进行,它是一个RMI调用。然后,我们定位远程对象,返回代理引用,这也是一个 RMI调用。第二个语句示范了如何创建一个实例,涉及了创建IIOP请求并在网络上传输请求的stub程序,它也是一个RMI调用。

要实现本地接口,我们必须作如下修改:


方法不能再抛出java.rmi.RemoteException异常,包括从RemoteException派生的异常,比如 TransactionRequiredException、TransactionRolledBackException和 NoSuchObjectException。EJB提供了等价的本地异常,如TransactionRequiredLocalException、 TransactionRolledBackLocalException和NoSuchObjectLocalException。
所有数据和返回值都通过引用的方式传递,而不是传递值。
本地接口必须在EJB部署的机器上使用。简而言之,客户程序和提供服务的组件必须在同一个JVM上运行。
如果Bean实现了本地接口,则其引用不可串行化。
请参见《用本地引用提高EJB访问效率》。

2.7 生成主键

在EJB之内生成主键有许多途径,下面分析了几种常见的办法以及它们的特点。

利用数据库内建的标识机制(SQL Server的IDENTITY或Oracle的SEQUENCE)。这种方法的缺点是EJB可移植性差。

由实体Bean自己计算主键值(比如做增量操作)。它的缺点是要求事务可串行化,而且速度也较慢。

利用NTP之类的时钟服务。这要求有面向特定平台的本地代码,从而把Bean固定到了特定的OS之上。另外,它还导致了这样一种可能,即在多CPU的服务器上,同一个毫秒之内生成了两个主键。

借鉴Microsoft的思路,在Bean中创建一个GUID。然而,如果不求助于JNI,Java不能确定网卡的MAC地址;如果使用JNI,则程序就要依赖于特定的OS。

还有其他几种办法,但这些办法同样都有各自的局限。似乎只有一个答案比较理想:结合运用RMI和JNDI。先通过RMI注册把RMI远程对象绑定到JNDI树。客户程序通过JNDI进行查找。下面是一个例子:


public class keyGenerator extends UnicastRemoteObject implements Remote {
private static long KeyValue = System.currentTimeMillis();
public static synchronized long getKey() throws RemoteException { return KeyValue++; }


2.8 及时清除不再需要的会话

为了清除不再活动的会话,许多应用服务器都有默认的会话超时时间,一般为30分钟。当应用服务器需要保存更多会话时,如果内存容量不足,操作系统会把部分内存数据转移到磁盘,应用服务器也可能根据“最近最频繁使用”(Most Recently Used)算法把部分不活跃的会话转储到磁盘,甚至可能抛出“内存不足”异常。在大规模系统中,串行化会话的代价是很昂贵的。当会话不再需要时,应当及时调用HttpSession.invalidate()方法清除会话。HttpSession.invalidate()方法通常可以在应用的退出页面调用。

2.9 在JSP页面中关闭无用的会话

对于那些无需跟踪会话状态的页面,关闭自动创建的会话可以节省一些资源。使用如下page指令:


<%@ page session="false"%>

2.10 Servlet与内存使用

许多开发者随意地把大量信息保存到用户会话之中。一些时候,保存在会话中的对象没有及时地被垃圾回收机制回收。从性能上看,典型的症状是用户感到系统周期性地变慢,却又不能把原因归于任何一个具体的组件。如果监视JVM的堆空间,它的表现是内存占用不正常地大起大落。

解决这类内存问题主要有二种办法。第一种办法是,在所有作用范围为会话的Bean中实现HttpSessionBindingListener接口。这样,只要实现valueUnbound()方法,就可以显式地释放Bean使用的资源。

另外一种办法就是尽快地把会话作废。大多数应用服务器都有设置会话作废间隔时间的选项。另外,也可以用编程的方式调用会话的 setMaxInactiveInterval()方法,该方法用来设定在作废会话之前,Servlet容器允许的客户请求的最大间隔时间,以秒计。

2.11 HTTP Keep-Alive

Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。

2.12 JDBC与Unicode

想必你已经了解一些使用JDBC时提高性能的措施,比如利用连接池、正确地选择存储过程和直接执行的SQL、从结果集删除多余的列、预先编译SQL语句,等等。

除了这些显而易见的选择之外,另一个提高性能的好选择可能就是把所有的字符数据都保存为Unicode(代码页13488)。Java以Unicode形式处理所有数据,因此,数据库驱动程序不必再执行转换过程。但应该记住:如果采用这种方式,数据库会变得更大,因为每个Unicode字符需要2个字节存储空间。另外,如果有其他非Unicode的程序访问数据库,性能问题仍旧会出现,因为这时数据库驱动程序仍旧必须执行转换过程。

2.13 JDBC与I/O

如果应用程序需要访问一个规模很大的数据集,则应当考虑使用块提取方式。默认情况下,JDBC每次提取32行数据。举例来说,假设我们要遍历一个5000 行的记录集,JDBC必须调用数据库157次才能提取到全部数据。如果把块大小改成512,则调用数据库的次数将减少到10次。

在一些情形下这种技术无效。例如,如果使用可滚动的记录集,或者在查询中指定了FOR UPDATE,则块操作方式不再有效。

1.14 内存数据库

许多应用需要以用户为单位在会话对象中保存相当数量的数据,典型的应用如购物篮和目录等。由于这类数据可以按照行/列的形式组织,因此,许多应用创建了庞大的Vector或HashMap。在会话中保存这类数据极大地限制了应用的可伸缩性,因为服务器拥有的内存至少必须达到每个会话占用的内存数量乘以并发用户最大数量,它不仅使服务器价格昂贵,而且垃圾收集的时间间隔也可能延长到难以忍受的程度。

一些人把购物篮/目录功能转移到数据库层,在一定程度上提高了可伸缩性。然而,把这部分功能放到数据库层也存在问题,且问题的根源与大多数关系数据库系统的体系结构有关。对于关系数据库来说,运行时的重要原则之一是确保所有的写入操作稳定、可靠,因而,所有的性能问题都与物理上把数据写入磁盘的能力有关。关系数据库力图减少I/O操作,特别是对于读操作,但实现该目标的主要途径只是执行一套实现缓冲机制的复杂算法,而这正是数据库层第一号性能瓶颈通常总是 CPU的主要原因。

一种替代传统关系数据库的方案是,使用在内存中运行的数据库(In-memory Database),例如TimesTen。内存数据库的出发点是允许数据临时地写入,但这些数据不必永久地保存到磁盘上,所有的操作都在内存中进行。这样,内存数据库不需要复杂的算法来减少I/O操作,而且可以采用比较简单的加锁机制,因而速度很快。  

第11期 《技术集锦》 2017年8月刊 1、韦文文  Tomcat使用总结   Tomcat一般我们开发都会用,这篇博客较详细的介绍了Tomcat目录结构以及配置文件的介绍,其中性能优化部分对我们开发是非常重要的。。 2、王孟梅  【Java基础】——异常处理    常处理并不仅仅是我们try catch throw就可以的,我们需要进一步规范和使用。 3、胡志婷 【Shiro】概述 阅读详情

相关推荐

Java性能优化传奇之旅--Java万亿级性能优化之Java 性能优化逆袭:常见错误不再是阻碍

本文深入探讨 Java 性能优化中的常见错误。首先阐述热门技术如内存管理优化、代码优化、数据库访问优化、多线程与并发优化及性能监控与调优工具对性能的提升作用。接着详细剖析常见错误,包括过度依赖自动内存管理而不进行调优、不重视代码可读性与可维护性、忽视数据库索引与查询优化、未合理使用缓存、线程使用不当、对性能监控理解不足及缺乏有效的压力测试等。通过实际案例与解决方法,为 Java 开发者提供全面的性能优化指导,助其避开错误陷阱,充分发挥热门技术优势,提升应用程序性能

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 3308

Java性能优化技巧集锦

Java性能优化技巧集锦 摘要: =================================== 可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。 =================================== 提纲: =

My urban life 1492

Java性能优化传奇之旅--Java万亿级性能优化之Java 性能优化传奇:热门技术点亮高效之路

本文详细阐述了 Java 性能优化的热门技术。从内存管理的合理设置堆内存大小、减少垃圾回收次数,到代码优化的算法与数据结构选择、避免过度同步、优化字符串操作及提高可读性;再到数据库访问优化的连接池使用、SQL 查询优化和异步访问;以及多线程与并发优化的线程数量设置、线程池运用和避免死锁。通过丰富的代码示例和实际案例,为开发者展现了一条 Java 性能优化的高效之路。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 3441

10条网站易用性技巧

1. 给你的logo添加替代文本 这样有两个好处:屏幕阅读器能识别logo图片代表的含义,图片未加载到时,也能告诉非视障用户那里是你的logo。 几种方法: 1 <img src="logo.png" alt="前端界"> 或者,你用背景图来实现logo的话,也可以添加title属性来实现: 1 2 ...

weixin_30855099的博客 3165

Java性能优化实践:分享Java性能优化的实践经验

Java Profiler是一种常用的性能分析工具,它可以帮助开发者找到Java应用程序的瓶颈。采样是指在指定时间间隔内检查应用程序的状态,而跟踪则是指在应用程序执行过程中监视方法的调用和返回。使用Java Profiler分析程序性能、使用JMH进行基准测试、优化JVM参数等都是优化Java程序性能的常用方法和技巧。JMH是Java Microbenchmark Harness的缩写,是一个用于进行基准测试的工具。JVM参数是指在启动Java虚拟机时指定的一些选项,可以影响Java应用程序的性能。

陈书予 2243

Java性能优化

全面讲解Java性能优化,包含代码分析,常用的代码优化方案,缓冲区缓存,性能测试工具介绍,多线程用法多线程锁等

qq_43427354的博客 701

[转载] Java 性能优化技巧集锦 (6)

http://tech.ccidnet.com/pub/article/c1077_a199225_p6.html5. 延迟重画操作对于图形用户界面的应用来说,性能低下的主要原因往往可以归结为重画屏幕的效率低下。当用户改变窗口大小或者滚动一个窗口时,这一点通常可以很明显地观察到。改变窗口大小或者滚动屏幕之类的操作导致重画屏幕事件大量地、快速地生成,甚至超过了相关代码的执行速度。对付这个问题最好的办

云雀的理想 1088

Java中性能优化报错的解决方法

在Java开发中,性能优化是确保应用程序高效运行的关键环节。然而,性能优化过程中常常会遇到各种报错和问题,如内存泄漏、长时间GC停顿、高CPU使用率、I/O操作瓶颈、数据库性能问题、网络延迟、锁争用、类加载问题、大对象分配和热点代码问题等。这些问题不仅影响应用程序的性能,还可能导致系统崩溃或不稳定。本文将分享全网最有效最简单的解决方案,帮助开发者快速定位并解决Java性能优化中的报错问题。

shejizuopin的博客 876

java实现大文件下载(http方式)

https://my.oschina.net/zmf/blog/336961

zhaoyang10的专栏 2万+

scGPT-spatial 复现

文章摘要:Spatial scGPT项目复现流程 本文详细介绍了复现Spatial scGPT项目的完整流程,包含数据预处理、模型训练等关键步骤。首先需要使用scanpy加载H5AD文件并进行归一化、对数变换等预处理。然后构建基因词汇表(vocab),提取基因表达值和空间坐标信息。接着使用DataCollator进行数据分箱、掩码和填充处理。最后搭建TransformerModel进行训练。文章特别指出了需要自行补全的缺失部分,包括基因词汇表构建、空间坐标提取、数据集类定义和训练主循环脚本等。作者还提供了详

victory0431的博客 1683

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。

hakesashou的博客 1万+

性能优化实践总结——JAVA

从JVM、高并发、数据库、缓存、生成环境实践等多方面总结了Java应用程序的性能优化实践方案!

码说芯语的博客 3585

工作:三菱PLC与伺服之CC-Link IE Field Network通讯应用

CC-LINK-IE

好记性不如烂笔头 2万+

你值得拥有的求职技术集锦

五月快去了,有的小伙伴裸辞后还没找到合适的工作。看这里,作者彻夜整理,给大家准备了几个快速提高自己面试功力的求职技术集锦,希望对大家有帮助。小强的进阶之路▲长按图片识别二...

Java和Android架构 301

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战

惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6

weixin_28684655的博客 595

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6052

金三银四你值得拥有的求职技术集锦

金三银四都快过了,有的小伙伴裸辞后还没找到合适的工作。看这里,作者彻夜整理,给大家准备了几个快速提高自己面试功力的求职技术集锦,希望对大家有帮助。御姐聊IT▲长按图片识别...

Java和Android架构 271

基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

一、前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制 二、实验内容 本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供: ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真

耐心的小黑的博客 3027

Java 集合性能优化

Java 集合的性能优化主要围绕以下几个方面:选择合适的集合类型、设置合理的初始容量、避免不必要的同步与装箱操作、以及尽量使用批量操作和高效的迭代方式。在实际开发中,理解不同集合的特性,并根据具体应用场景进行针对性优化,是提升程序效率的关键。通过合理使用这些优化技巧,你可以在日常开发中显著提升 Java 集合的性能,为你的应用带来更高的运行效率。

qq_40697623的博客 2628

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例

本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方

xiaoheshang_123的博客 318

ultralytics.data.utils——utils.py子模块代码详读

ultralytics.data.utils——utils.py子模块代码详读

Together_CZ的博客 1720

Java21和Java8性能优化详细对比

本文将详细对比java21和java8这两个版本在性能优化方面的差异

驴大毛的博客 3695

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

《Java性能优化权威指南》

《Java性能优化权威指南》 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt    Binu John    译者: 柳飞 陆明刚 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115342973 上架时间:2014-2-18 出版日期:201...

weixin_33739541的博客 470

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

【JAVA】Java虚拟机性能优化实践

Java虚拟机是Java程序的运行环境,它将Java字节码转换为机器码并执行。Java虚拟机提供了自动内存管理、垃圾回收、线程管理等功能,使得Java程序具有跨平台性和高可靠性。Java虚拟机性能优化是Java程序开发中非常重要的一环。遵循优化原则,使用优化工具,针对实际问题进行优化,可以提高程序性能和可靠性。同时,Java虚拟机性能优化需要具备一定的专业知识和经验,建议在实践过程中多加思考和总结,不断提高自己的技术水平。

实践是检验真理的唯一标准 858

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java性能优化的五种方式

Java性能优化的五种方式1.Java性能优化之设计优化2.JAVA性能优化之代码优化3.JVM优化4.数据库优化5.JAVA性能优化之操作系统优化 1.Java性能优化之设计优化 设计优化处于性能优化手段的上层,往往要在软件开发之前进行。在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设计和系统架构对软件总体设计质量有决定性的影响。所以,设计调优对系统的性能影响也是最大的。假如说代码优化、JVM优化都是对系统的微观层次的“量”的优化,那设计优化就是对

甘信的博客 1152
上一篇: Flex Sound Effect 异常
下一篇: ActionScript MD5 加密算法实现
cwfmaker
博客等级 码龄18年 6粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值