当前位置:首页 > java > 正文

java编程优化

  • java
  • 2024-04-21 21:05:39
  • 4829

一、java10编程语言都有哪些新特点?

前段时间我们给大家简单介绍了Java10的特性和发布日期。 今天,我们就来正式了解一下Java10编程开发语言的新特性以及如何使用这些特性。


Java10中的新功能


此次发布的Java10并没有带来太多新功能。


根据官网公开信息,共有12个JEP(JDKEnhancementProposal),提供了以下改进:


JEP286,局部变量类型推断var。


JEP296将许多原本由Mercurial管理的JDK仓库代码合并到一个仓库中,以简化开发和管理流程。


JEP304,统一垃圾回收接口。


JEP307,G1垃圾收集器的并行完整垃圾收集,实现并行性以改善恶劣情况下的延迟。


JEP310,应用程序类数据共享(AppCDS),通过在进程之间共享公共类元数据来减少内存占用和启动时间。


JEP312,ThreadLocal握手交互。 在线程上执行回调,而无需进入JVM的全局安全点。 优化可以停止单个线程,而不是停止所有线程或不停止。


JEP313,移除JDK中包含的javah工具。 您可以使用javac-h代替。


JEP314,使用额外的Unicode语言标签扩展。


JEP317可以将堆内存占用分配给用户指定的备用内存设备。


JEP317,使用Graal的Java编译器,可以将Java代码预编译为本地代码,以高性能。


JEP318,在OpenJDK中提供一组默认的根CA证书。 开源了Oracle目前提供的JavaSE根证书,使得OpenJDK更加方便开发者使用。


JEP322,限时发布,也就是上面说的发布周期。 版本号为\$FEATURE.\$INTERIM.\$UPDATE.\$PATCH,分别对应主版本、临时版本、升级包、补丁版本。


部分功能描述


类型推断1.var。


此语言功能已添加到一些其他语言(C#、JavaScript)和一些基于JRE的语言(Scala和Kotlin)中。


Java语言考虑很久了,北大青鸟云南计算机学院https://www.kmbdqn.cn/发现正式早在2016年的JEP286提案中就提交了。 后来组织了一次针对开发工程师的公开调查。 最流行的建议是采用类似Scala的解决方案,“同时使用val和var”,这大约是第二个最重要的建议“仅使用var”的一半。 ,大约代表四分之一。 后来Oracle经过深思熟虑,采用了只使用var关键字的解决方案。



二、假期提高千倍效率的Java代码小技巧

Java性能提升千倍的技巧

1尝试指定类和方法的最后一个修饰符

带有final修饰符的类不会被派生。 在Java核心API中,有很多final应用的例子,比如java.lang.String,整个类都是final的。 为类指定final修饰符将阻止该类被继承,为方法指定final修饰符将阻止该方法被覆盖。 如果一个类被指定为final,那么该类的所有方法都是final的。 Java编译器将寻找机会内联所有最终方法。 内联对于提高Java性能起着重要作用。 有关详细信息,请参阅Java运行时优化。 这可以平均提高50%的性能。

2.尝试重复使用物品。

特别是使用String对象时,当发生字符串连接时,应该使用StringBuilder/StringBuffer来代替。 因为Java虚拟机不仅要花时间创建对象,将来可能还需要花时间对这些对象进行收集和垃圾处理。 因此,创建过多的对象会极大地影响程序的性能。

3.尽可能使用局部变量。

调用方法时传递的参数以及调用过程中创建的临时变量都会存储在栈中,速度更快。 其他变量,如静态变量、实例变量等,都是在堆栈中创建的。 堆,速度较慢。 此外,当方法结束时,在堆栈上创建的变量的内容会消失,并且不需要额外的垃圾回收。

4.立即关闭流。

Java编程时,在进行数据库连接和I/0流操作时要小心,使用完后要及时关闭,以释放资源。 因为操作这些大对象会对系统造成很大的损害,稍有不慎就会导致严重的后果。

5.使用异常时要小心。

异常会损害性能。 要抛出异常,必须首先创建一个新对象。 Throwable接口的构造函数调用名为fillnStackTrace()的本地同步方法。 只要抛出异常,fillnStackTrace()方法就会检查堆栈并收集调用跟踪信息。 ,Java虚拟机必须调整CallStack,因为在处理过程中创建了一个新对象。 异常只能用于错误处理,不能用于控制程序流程

6.··.陷入循环·,应该放在最外层

如果你无缘无故写这篇文章,只要你的领导级别更高,有强迫症,强行拍照可能就是这样那。 骂你写这个。 这是垃圾代码

7。 不要将数组声明为publicstaticfinal。

由于这没有意义,所以引用的数组的内容是。 staticfinal仍然可以随意更改,将数组声明为public是一个安全漏洞,这意味着该数组可以被外部类更改

单例可以减轻加载负担,缩短加载时间,提高加载效率,但不能应用于所有地方的单例。 简单来说,单例主要适合以下三个方面

(1)控制资源使用,通过线程同步控制对资源的并发访问;

(2)控制版本控制,实现达到节省资源的目的;

(3)控制数据共享,使多个不相关的进程或流之间能够进行通信,而无需建立直接关联

9。 及时删除不再需要的会话。 对于不再活动的会话,许多应用程序服务器都有默认的会话超时,通常为30分钟。 当应用程序服务器需要保存更多会话时,如果应用程序服务器内存不足,操作系统会将一些数据传输到磁盘。 还可以根据MRU算法(最近使用的)将一些不活动的会话转储到磁盘,甚至可以抛出内存不足异常。 如果将会话转储到磁盘,则必须首先在大规模集群中对其进行序列化。 ,序列化对象的成本很高。 因此,当不再需要session时,必须立即调用HttpSession的invalidate()方法来清除session。

10.使用同步代码块。

这个在多线程模块中的同步锁方法块一文中已经说得很清楚了。 除非你确定整个方法需要同步,否则尝试使用同步代码来避免同步。 不需要同步,影响代码执行效率

11.将常量声明为staticfinal并以大写字母命名

这样您就可以包含常量。 编译期间使用池以避免在运行时计算常量的值。 另外,用大写字母命名常量还可以帮助你轻松区分常量和变量