aix系统java堆_浅谈AIX环境下的Java性能调优

1、什么是Java

Java 是一种面向对象的编程语言。它以 C++ 为模型,被设计成小的、简单的、在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经安装了 Java 虚拟机(JVM)的机器上。Java 相对其它计算机语言有显著的优势,适合于任何编程任务,Java 有以下优势:

Java 是独立于平台的:Java 最显著的一个优势就是它轻易从一台计算机系统移动到另一台的能力。对于任何Web软件至关重要的就是在许多不同系统上运行同一个程序的能力, Java 成功之处在于在源和二进制级别能够独立于平台。

Java 是面向对象的:Java 的另外一个优点在于利用面向对象的方法。这允许你创建模块化程序和可重用代码。

Java 容易学习:Java 被设计成容易使用的语言,因此它更易于写、编译、调试以及学习。

Java 是电子商务的解决方案: 由于 Java 的健壮性、使用方便、跨平台的能力和安全性特点,它已成为了提供世界范围内因特网解决方案的选择语言。

2、AIX环境下的Java版本

目前,AIX操作系统可以支持多个Java版本,可以在一个操作系统下同时安装多个Java版本,应用需要哪个版本时,可设置PATH路径到此版本所在的目录。以下是AIX可支持的Java版本信息:

Java 1.1.8

Java 1.2.2

Java 1.3.0

Java 1.3.1 32bit

Java 1.3.1 64bit

Java 1.4 32bit

Java 1.4 64bit

从性能来看,尽量使用高版本的AIX和高版本的Java,并且安装最新的操作系统和Java补丁包。当需要超过2GB的Java 堆时,需要使用64bit的Java。在AIX环境下,Java是免费使用的,可以从下列网址下载Java软件:

从下列网址下载AIX操作系统和Java的补丁包:.

3、Java 性能准则

在编写Java应用程序时,以下是基本的准则:

使用字符串缓冲区而不是字符串连接,当进行连续字符串操作时要避免不必要地创建那些最终必须经过垃圾回收的对象。

避免连续写入 Java 控制台以减少字符串操作、文本格式化以及输出的花费。

必要时通过使用变量的原语类型来避免对象创建和操作的花费。

经常高速缓存用过的对象以减少必须的垃圾回收数量,并且避免重复创建对象的需求。

尽可能分组本地操作以减少 Java 本地接口(JNI)的调用。

只有在必要时再使用同步方法,以此限制在 JVM 和操作系统中的多任务。

除非必要避免调用垃圾回收器。如果您必须调用它,只有在空闲时间或一些非关键阶段再这样做。

可能时使用整型而不是长整型,因为 32 位操作快于 64 位。

可能时申明方法为 final。JVM 处理 final 的方法较好。

当创建常量时为了减少变量需要初始化的次数,使用关键字 static final。

避免不必要的“casts”和“instanceof”引用,因为在 Java 中销毁操作不是在编译时而是在运行时执行的。

当数组可以满足要求时尽可能避免使用向量。

从向量末端添加和删除项以得到较高性能。

使用 -O 选项编译 Java 文件。

避免在循环中分配对象。

使用缓冲区 I/O 并调优缓冲区大小。

使用连接池和准备缓存声明进行数据库访问。

使用连接池连接到数据库并重用连接而不是重复打开和关闭连接。

最大化线程生存期并最小化线程创建和销毁循环。

最小化共享资源的争用。

最小化短生存期对象的创建。

避免远程方法调用。

使用回调以避免阻塞远程方法调用。

避免创建只用来访问一个方法的对象。

尽可能保持同步方法处于循环外。

在数据库中以 Unicode 形式存储字符串和字符数据。

记录 CLASSPATH 以便最常用的库先出现。

4、监视 Java

在AIX 操作系统中有许多工具可以用来监视Java应用程序的性能,以下是简单的概述。

vmstat

这条命令提供了各种系统资源的信息。它报告了运行队列以及等待队列中内核线程的统计信息、内存使用、页面调度空间、磁盘 I/O、中断、系统调用、上下文切换以及 CPU 活动。

iostat

这条命令报告了详细的磁盘 I/O 信息。

topas

这条命令报告了 CPU、网络、磁盘 I/O、工作负载管理器和进程活动。

tprof -k -s -e -x "sleep 10"

这条命令可被用来剖析应用程序以查明任何可能影响性能的活动程序/方法。

ps -mo 线程

这条命令显示了一个进程或线程绑定于哪一个 CPU。

java -verbose:gc

这个选项可被用来检查垃圾回收对您的应用程序的冲击。它报告了垃圾回收所花的总共时间,平均每一次垃圾回收花费时间,平均每一次垃圾回收收集的内存以及平均每一次垃圾回收中的对象数。

5、Java应用程序性能调优

建议在运行Java应用的AIX用户环境下,设置以下环境变量。

AIXTHREAD_SCOPE=S

用 AIX 4.3.1 启动,此变量缺省值为 P。这表示进程宽度争用作用域(M:N)。对于 Java 应用程序,您应该设置这个值为 S,它表示系统宽度争用作用域(1:1)。

AIXTHREAD_MUTEX_DEBUG=OFF

用调试器为使用目的维持一个活动人工干预列表。

AIXTHERAD_COND_DEBUG=OFF

用调试器为使用目的维持一个条件变量列表。

AIXTHREAD_RWLOCK_DEBUG=OFF

pthreads 库用调试器为使用目的维护一个包含活动互斥锁定、条件变量以及读/写锁定的列表。当一个锁定初始化,如果列表中没有这一锁定,它被加入到列表中。此列表以链表形式实现,因此当列表变大时通过搜索它来确定一个锁定是否存在就包含了性能问题。问题是此列表被锁定保护,这一锁定在搜索操作过程中一直保持。当搜索进行时其它对 pthread_mutex_init() 调用的子例程必须等待。为了优化性能,您应当将此线程调试选项设置为 OFF。它们的缺省值为 ON 。

SPINLOOPTIME=500

spinloop 时间是一个进程在阻塞前在一个繁忙的锁定上可以循环的次数。这个值缺省设置为 40。如果 tprof 输出表明 check_lock 例程具有高的 CPU 使用率,并且如果通常锁定在短时间内可用,您应当通过将值设置为 500 或更高来提高循环时间。

同样,运行Java应用的AIX用户环境下,推荐以下设置:

l ulimit -d 不限制

l ulimit -m 不限制

l ulimit -n 不限制

l ulimit -s 不限制

操作系统内一定的环境参数和设置可以用来调优 Java 性能。同样,许多调优系统部件如 CPU、内存、网络、I/O 等等的技术,可以提高 Java 性能。

为了使得 Java 的性能和可伸缩性尽可能的好,您应当使用最新可用版本的操作系统和 Java,以及Just-In-Time(JIT)编译器。

与 Java 相关的最普通的性能问题与垃圾回收机制有关。如果 Java 堆太大,则堆将必须驻留在主内存外。这将导致页面调度活动增加,它将影响 Java 性能。同样,一个大的堆可能花很多秒去填充。这意味着,尽管垃圾回收活动不频繁,但与垃圾回收相联系的暂停次数将增加。为了调优 Java 虚拟机(JVM)的堆,使用 java 命令加选项 -ms 或 -mx。使用垃圾回收统计信息来帮助决定最佳设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web 前端 html

1,什么是web 在网络中,大量的数据需要有一个载体,而很多人都能够访问这个载体,利用浏览器的这个窗口链接一个有一个载体,这个载体就是网站也就是web的前身。  1,web标准:结构标准,表…

cf 1060e 树形dp 树上任意两点的距离和

题意: 给出一个树,把树上任意两个相隔一个点的点加一条边,问加完边之后任意两点的距离和是多少. 参考博客 :https://blog.csdn.net/Mr_Treeeee/article/details/82960566 思路:枚举边的贡献 算出所有点与点之间的距离&…

再谈前后端分离

前段时间我针对手头上的项目前端配置进行了反思以及总结并且写了两篇文章: webpack传统后端渲染的项目前端配置, webpack配置之前后端不分离, 很显然这些配置能满足一时的需求, 但是也有不足. 今天继续总结, 这里应该不涉及到具体后端语言, 只对前端配置进行描述. 毕竟配置工程…

JAVA中带有数字签名的XML安全性

介绍 如您所知,XML在我们的产品或项目开发中起着重要作用,并且从XML文档中我们收集了很多信息,而且我们可以对XML文件执行CRUD操作。 但是,关于如何确保XML文件中可用的数据是真实的以及数据来自受信任的可靠来源,这是…

mysql的命令行常用命令_mysql命令行常用命令

第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的…

Python - day1 借鉴洪卫

一、了解开发语言 1、高级语言:Python,Java,C,C#,PHP,JS,Go,Ruby,SQL,Swift,Perl,Objective-C,R等等; 2、低级…

返回一个二维整数数组最大子数组的和

要求: 1,输入一个二维整形数组,数组里有正数也有负数。 2,二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和, 3,求所有子数组的和的最大值。 设计思路: 参照一维整数数组求解最大…

基于React的表单开发的分析(上)

本文主要讲解后台系统与表单相关的页面开发,并分析如何才能更好地、高效地开发。 技术栈 ReactAntd 背景 Antd 以下我都将Ant Design 简称为 Antd Ant Design是个服务于企业级产品的UI框架,主要可以用于中后台系统,它有基于React、Vue和Angular的实现…

50个Servlet面试问答

Servlet是Java EE的一个非常重要的主题,所有Web应用程序框架(例如Spring和Struts)都建立在它之上。 这使servlet成为Java访谈中的热门话题。 在这里,我提供了50个servlet面试问题的列表,并提供了答案,以帮…

在vue中使用font-awesome

1、安装 cnpm i font-awesome -S 2、在main.js中引入 import font-awesome/css/font-awesome.min.css 转载于:https://www.cnblogs.com/wuln/p/9072084.html

深入浅出的webpack4构建工具--webpack4+react构建环境(二十)

下面我们来配置下webpack4react的开发环境,之前都是针对webpack4vue的。下面我们也是在之前项目结构的基础之上进行配置下。 首先看下如下是我为 webpack4react 基本的项目结构如下: ### 目录结构如下: demo1 …

Webpack 4进阶--从前的日色变得慢 ,一下午只够打一次包

从前的日色变得慢,车,马,邮件都慢,一生只够爱一个人 -- 《从前慢》 近期在团队项目里把Webpack升级到4.4.1,过程中发现现存的升级文档十分有限,踩了不少坑,好在升级之后提升还算显著&#xff0c…

使用Guava MapSplitters配置Hadoop

在本文中,我们将为通过Context对象将配置参数传递给Hadoop Mapper提供新的思路。 通常,我们在启动map-reduce作业时将配置参数设置为Context对象上的键/值对。 然后,在Mapper中,我们使用键来检索用于我们的配置需求的值。 不同之处…

pdo 参数化查询 mysql函数_PDO笔记之参数化查询

参数化查询解释在这里:Wiki参数化查询 (少有的Wiki中文比英文介绍的要详细的编程条目)PDO中参数化查询主要用到prepare()方法,然后这个方法会返回一个PDOStatement对象,也就SQL声明(不知道怎么翻译),此时SQL语句只是被编译&#x…

二叉树和哈希表的优缺点对比与选择

二叉树(binary tree)和哈希表(hash table)都是很基本的数据结构,但是我们要怎么从两者之间进行选择呢?他们的不同是什么?优缺点分别是什么? 回答这个问题不是一两句话可以说清楚的,原因是在不同的情况下,选…

编码Java时的10个微妙的最佳实践

这是10个最佳实践的列表,这些最佳实践比您的平均Josh Bloch有效Java规则要微妙得多。 尽管Josh Bloch的列表很容易学习,并且涉及日常情况,但此处的列表包含了涉及API / SPI设计的较不常见的情况,但可能会产生很大的影响。 我在编…

Vue 实现微信 jssdk 扫码, 上传图片

流程 1: 配置微信公众号JS域名 2:前端发送URL后台获取JSSDK配置, 后台Service代码如下, 修改2处位置: WeixinUtil.APPID > 当前公众号APPID WeixinUtil.getAccessToken() > 当前公众号access_token public interface IWxJssdkService {Map<String, Object> getJssd…

有意思的前端函数面试题

1:考引用类型在比较运算符时候 隐式转换会调用本类型那个方法 toString和valueOf&#xff1f;(去年过年吵的很火国外的题) if(a 1 && a 2 && a 3){console.log("我走进来了"); }<!--答案1:--> var a {num:0}; a.valueOf function(){retur…

用java写个简单的直播强求_全网最简单易懂的Netty入门示例,再不会用Netty我直播吃翔...

//server引导类ServerBootstrap serverBootstrap new ServerBootstrap();//boss 对应 IOServer.java 中的接受新连接线程,主要负责创建新连接NioEventLoopGroup boss new NioEventLoopGroup();//worker 对应 IOServer.java 中的负责读取数据的线程,主要用于读取数据以及业务逻…

XamarinAndroid组件教程设置自定义子元素动画(一)

XamarinAndroid组件教程设置自定义子元素动画(一) 如果在RecyclerViewAnimators.Animators中没有所需要的动画效果&#xff0c;就可以自定义一个。此时&#xff0c;需要让自定义的动画继承BaseItemAnimator抽象类。 【示例1-2】下面以RecylerViewAnimatorsItemAnimator项目为基…