打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
浅谈java性能优化

这首歌分享给大家,无论怎样,感谢17有你,你的18有我,新的一年,祝一切都好,想你。

现实里可能没有完美无缺的代码。如果有,那么,过来,我写一段代码给你看。

Java已经成为了编程语言的骄子。 Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,越来越多的企业在数据结构、算法分析、软件开发等研究设计时,都选择以Java语言作为载体。这说明Java语言已经是人们构建软件系统时主要使用的一种语言。如何让Java程序运行是一回事,而如何然它们跑的快又是另外一回事了......

或许听了太多关于java性能优化的故事。这些故事俨然成为了程序员的典范。用我的话来说,这别人本来就不容易听进去的东西,有点随着时间、压力和现实的摧毁下,慢慢成了一种消失的文化。

本文以一个开发者的角度,分析、总结和整理了一些Java性能优化的原因和方法,在此和大家浅浅的交流一下,不喜勿喷。

1

问题

为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了?也许,你经常会抱怨这些问题。其实并不是每个Java程序都需要调优的。如果一个程序可以表现的和预期差不太多,就不必付出额外的精力去提高它的性能。

但是,理想和现实总是有差别的。由于以下原因都会导致:

1、框架搭建的不完善、程序设计上的缺失;

2、客户咄咄逼人的需求修改;

3、随着上线时间的临近,考虑时间优先原则,放弃了原有的开发原则;

4、程序员的盲目自信,感觉自己做的已经相当完美了;

5、现代化设备的先进性,导致开发人员忽略资源合理利用的问题。

这些都导致了程序质量的下降,速度变慢甚至系统崩溃的原因。所以在某些不可控制的因素下,Java程序的性能优化显得尤为重要,弥补上述的不足。就好比你拍完了照片,需要ps修饰之后才发布在你的朋友圈是一样的道理。

2

准备

每个程序都有它自己独特的运作方式和不同的资源使用方式。正因如此,调优比写程序需要更多基础知识。例如,你需要熟悉虚拟机、操作系统和计算机架构。而当你面对在这些知识基础上编写的程序时,就能成功地对它进行调优。一般大致应该了解一下信息:

调优方向:设计调优 、代码调优 、JVM调优 、数据库调优 、操作系统调优

基本原则:Java程序在业务响应时间要求内执行计算任务的能力,程序在高容量下执行业务功能的能力,并具有可靠性高和延迟低的特点。

参考指标:执行时间、CPU时间、内存分配、磁盘吞吐量、网络吞吐量、响应时间

服务器资源:磁盘I/O、网络操作、CPU、内存

3

了解和处理

这里针对JVM调优进行一个简单的叙述。

知识总结:

1、什么是JVM

一个JVM是一个软件模块,用于执行Java应用字节码并且把字节码转化到硬件,操作系统特殊指令。通过这样做,JVM允许Java程序在第一次编写后可以在不同的环境中执行,并不需要更改原始的代码。Java的可移植性是通往企业应用语言的关键:开发者并不需要为不同平台重写应用代码,因为JVM负责翻译和平台优化。

2、JVM运行原理

Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,就可以在多种平台上不加修改地运行。

3、JVM基本结构

JVM主要包括四个部分:

1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。

2.执行引擎:负责执行class文件中包含的字节码指令。

3.内存区(也叫运行时数据区):是在JVM运行的时候操作所分配的内存区。

4.本地方法接口:主要是调用C或C++实现的本地方法及返回结果。

JVM主要物理结构,如下图所示:

简单调优:

1、选择一个正确的GC(GargageCollection)。

GC的性能主要有2个方面的指标:吞吐量throughput和暂停pause。选择正确的GC可以达到两个目的:一个是将转移到老年代的对象数量降到最少,另一个是减少Full GC的执行时间。JAVA5 以后,开始自带了好几种GC机制,你可以选择一个适合你的种类。有以下四种Serial Collector,Parallel collector,Concurrent Collector,Train Collector。最常用的GC类型是Serial GC。

2、正确设置内存大小。

设置JVM内存的参数有四个:

-Xmx:Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

-Xms:Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

-Xmn:Java Heap Young区大小,不熟悉最好保留默认值;

-Xss:每个线程的Stack大小,不熟悉最好保留默认值;

如果你能够准确的预估到应用需要消耗的Java堆空间,可以通过设定-Xmx和-Xms来作为这个步骤的起点。如果你不知道该设定什么值,就让JVM来选择吧,反正后面,都会根据实际情况进行优化调整。

3、减小类的使用量,注意类的load和unload。

类实际上也是对象,会直接分配perm区域里,即使Full GC也会很少收集。如果perm过大,超过XX:MaxPermSize值,会发生 OutOfMemoryError:PermGen space异常。

4、其它注意事项

(1)手动将生成的无用对象,中间对象置为null,加快内存回收。

(2)考虑采用对象池来较少对象的生成。如果有空闲的对象就从对象池中取出使用,没有再生成新的对象,大大提高了对象的复用率。

(3)配置JVM的参数来提高垃圾回收的速度

(4)充分利用单例机制。

谢谢你因为我看到这篇不算文章的文章。至于是不是废文,就看你自己的判断了,如果某一句话会对你有用,那就可以了。

关于IDEADATA

IDEADATA专注于从数据到信息的有效管理与应用,是领先的商业信息服务技术提供商,是数据仓库及大数据技术和应用的先行实践者。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一个优秀的Java程序员必须了解的GC机制
关于Java性能方面的9个谬论
JVM监控与调优
JVM7、8详解及优化
jvm介绍(很好的一篇文章)
JVM调优
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服