java 注解应用技巧_改善Java应用程序性能的快速技巧

java 注解应用技巧

曾经遇到过性能问题吗? 我也是。 如果我的经理再喊一次“ faaaaster”,我一生都会有听力障碍。 顺便说一句,我能听到所有噪音中的德语发音吗? ;-)

您可以相信仍然有人无知地在谈论垃圾收集器(得到它吗?)和JVM的性能。

……我将再次返回C语言,因此我不必担心性能……

*叹*

JVM一直在不断改进其收集器算法,并且每个发行版中都将高度复杂的优化功能集成到了编译器中(并且在过去十年中一直在这样做)。 您是否真的希望比世界上一些最聪明的人有经验,能力和时间来编写更好,更优化的C代码?

Pleeeeease…

如果你和我一样,我们的99.99%的休息,你是明智忘掉C.只要克服它。 (向所有核心C程序员致敬,不要被激怒)。

尽管我们开发人员热爱抽象,但我们不能否认它们天生就是泄漏的事实。 硬件很重要。 处理器数量和内存增长的趋势使共享内存线程并发变得更加困难。 锁定 ,上下文切换和线程调度可以使您的吞吐量等于糖浆,认为将更多线程倒入闪亮的新超级美容机中将以某种方式神奇地为您提供更多性能。 在某种程度上可能会,但这不是我的意思。

那么该怎么办? 我并没有声称自己是一名性能专家,但我不是,但是我有一些实用建议,至少可以帮助我解决过去一些讨厌的性能错误。

1.编写简洁明了的代码。 考虑使您的类不可变,它们是线程安全的,因此不需要同步,并且可以放心地对其进行缓存,以确保对象值在创建后不会更改。 不变性还导致代码更易于理解。 不要尝试使用过早的优化技巧来超越JVM。

Donald Knuth说: “程序员浪费大量时间来思考或担心程序非关键部分的速度,而这些效率的尝试实际上在考虑调试和维护时会产生严重的负面影响。 我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。 但是我们不应该放弃我们那关键的3%的机会。”

2.花一些时间了解不同垃圾收集器的工作方式。 信息有点分散,但是它在那里。 找到垃圾回收和您的应用程序之间的资源共享最有效点。 一般来说,较大的堆意味着垃圾收集器需要更加努力地工作(窃取更多的CPU周期),并且暂停时间会更长,但频率却更低。 以我的经验,即使使用CMS也无法避免世界停顿,因为最终您的堆将像瑞士奶酪一样碎片化,并且繁荣, 内存碎片化失败 。 好消息是,JDK7可能会包含一个名为G1的新的低暂停时间收集器,该收集器有可能完全避免世界停顿。 另请参阅Java 7中的垃圾优先收集器(G1) 。

3.编程时,默认始终使用java.util.concurrency 。 阅读Java内存模型和线程规范 。 它将帮助您理解为什么您的代码可能无法正常运行。 关于并发的主题也有很多不错的书:

  • 实践中的Java并发
  • 多处理器编程的艺术
  • Java并发编程:设计原理和模式(第二版)

4.您可能正在处理具有粗糙粒度同步的旧代码(您无法影响),从而导致高线程争用。 将CPU亲和力与同一台机器上的多个JVM进程一起使用可以帮助减少对热锁的争用。

5.如果您认为通过执行基准测试发现JVM性能问题,请首先确保您“知道”测量结果是准确的 。 如果您尝试测量某些东西, 请不要测量其他东西 。 忽略此建议可能会使您误以为是真正的问题所在。 因此,在开始测量之前,请确保正确隔离系统部件。

例如,如果您怀疑线程争用,请查看ThreadInfo或尝试jstat并查找sun.rt._sync_ContendedLockAttempts。

jstat -J-Djstat.showUnsupported=true -snap PID | grep _sync_

关于这个主题有太多话要说,但是我现在没有时间写更多。 编码愉快!

参考: Deep Hacks博客上的JCG合作伙伴 Usain Bolt看起来 不错 。

相关文章 :

  • Java最佳实践
  • 如何在Java中获得类似于C的性能
  • 每个程序员应了解的内存系统知识
  • Java内存模型-快速概述和注意事项

翻译自: https://www.javacodegeeks.com/2011/09/quick-tips-for-improving-java-apps.html

java 注解应用技巧

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

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

相关文章

字符串系列函数(不断跟新)

1.sprintf,sprintf_s sprintf(char* buffer, const char* format, [argument]); vs下需要加上_CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int main() {char name[1];int input 9099;sprintf(name,"%d", input);system("pause&qu…

python获取指定区域的像素_如何获得某个区域的像素值?

因此&#xff0c;由于我对编程比较陌生&#xff0c;所以我需要一些帮助来解决这个问题。我在Windows计算机上使用SimpleCV和python2.7。我要做的是让一个(自写)程序告诉我沿着一条预设线的像素值&#xff0c;这里最重要的是每个像素的颜色。在我真的不知道从哪里开始&#xff0…

Windows 键盘操作快捷方式积累

复制、粘贴&#xff1a; CTRLC 复制被选择的项目到剪贴板 CTRLV 粘贴剪贴板中的内容到当前位置 CTRLX 剪切被选择的项目到剪贴板 Alt space E P CMD 窗口…

step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。

step7中的难点&#xff1a;间接寻址示例&#xff0c;中文详细注释。推荐欢迎纠错&#xff0c;防止误导。FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据&#xff0c;复制到另一个块的指定位置。TITLE //标题&#xf…

spring mvc 教程_Spring MVC开发–快速教程

spring mvc 教程这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图…

今天才知道css hack是什么

先来个冷笑话&#xff1a;一晚下班回家&#xff0c;一民警迎面巡逻而来。突然对我大喊&#xff1a;站住&#xff01; 民警&#xff1a;int类型占几个字节? 我&#xff1a;4个。 民警&#xff1a;你可以走了。 我感到很诧异。 我&#xff1a;为什么问这样的问题&#xff1f; 民…

汇智创科机器人_【汇智创科机器人招聘信息】-看准网

在单位去学校参加双选会时投的简历&#xff0c;当时就发了一个面试邀请&#xff0c;约的是10点&#xff0c;如果有人接到面试通知&#xff0c;最好早点去&#xff0c;如果十点去&#xff0c;早上弄不完&#xff0c;下午还要接着&#xff0c;很花时间。去了之后&#xff0c;给我…

java跳转_java servlet 几种页面跳转的方法

Servlet&#xff1a;当然&#xff0c;在servlet中&#xff0c;一般跳转都发生在doGet, doPost等方法里面。1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面&#xff0c;不一定局限于本web应用中&#…

实时监听输入框值变化的完美方案:oninput onpropertychange

实时监听输入框值变化的完美方案&#xff1a;oninput & onpropertychange 原文:实时监听输入框值变化的完美方案&#xff1a;oninput & onpropertychange在 Web 开发中经常会碰到需要动态监听输入框值变化的情况&#xff0c;如果使用 onkeydown、onkeypress、onkeyup 这…

java向应用程序传递参数_Java应用程序中的消息传递主体

java向应用程序传递参数消息传递是每个Java应用程序的关键方面&#xff0c;尤其是对于涉及企业应用程序集成&#xff08;EAI&#xff09;或关注点分离的应用程序&#xff0c;例如多层WEB应用程序。 消息传递可以分为两个主要类别&#xff0c;即同步和异步。 在同步消息传递中&…

java中native_java中的native关键字

JNI是JavaNative Interface的 缩写。从Java 1.1开始&#xff0c;Java Native Interface(JNI)标准成为java平台的一部分&#xff0c;它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言&#xff0c;尤其是C和C而设计的&#xff0c;但是它并不妨碍你使用其…

R语言对矩阵按某一列排序

[plain] view plaincopy a <- c(5,4,3,2,1) b <- c(1,2,3,4,5) c <- cbind(a,b) [plain] view plaincopyc[order(c[,1]),] #按第一列递增排序 转载于:https://www.cnblogs.com/jamesf/p/4751573.html

18.用两个栈实现队列[2StacksToImplementQueue]

【题目】 某队列的声明如下&#xff1a; C Code 123456789101112131415template<typenameT>classCQueue {public: CQueue() {} ~CQueue() {} voidappendTail(constT &node); // append a element to tailvoiddeleteHead(); // remove a e…

java 是用什么写的_java用什么写的

java用什么写的JAVA本身就是一门编程语言&#xff0c;它编译生成的文件运行在JVM上(java虚拟机)。JVM是由c语言和汇编语言开发的。基于此之上就是java了&#xff0c;虚拟机是起到解析执行的作用。JVM是java语言最大的特点&#xff0c;java的优缺点也是缘于JVM技术。JVM是一个可…

spring分布式事务示例_Spring声明式事务示例

spring分布式事务示例事务是具有ACID &#xff08;原子&#xff0c;一致&#xff0c;隔离和持久&#xff09;属性的工作单元。 原子意味着所有更改都发生或什么都没有发生。 如果从一个帐户借钱并记入另一个帐户&#xff0c;则交易将确保借记和贷项均已完成或均未完成。 一致表…

为什么单例模式是邪恶的(译)

原文链接&#xff1a;http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx 虽然这篇文章不是我写的&#xff0c;但我完全同意文章中的观点。Brian Button可能是我所知道的最有才的人之一。我相信他会喜欢你们的反馈的。 1、单例模式经常被用来为某些服务提供…

java properties 保存_Java 读写Properties配置文件

转自&#xff1a;https://www.cnblogs.com/xudong-bupt/p/3758136.html1.Properties类与Properties配置文件Properties类继承自Hashtable类并且实现了Map接口&#xff0c;也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方&#xff0c;就是它的键和值都是字符…

自动加密可序列化的类

在Coursera安全性最高项目的验尸讨论中提出了一个疯狂的想法。 类可以在序列化期间对其自身进行加密吗&#xff1f; 这主要是一项学术性的“假设”练习。 很难想到这样一种情况&#xff0c;我们希望在持久性期间依靠对象自加密而不是使用显式加密机制。 我只能确定一种情况&am…

java垃圾回收机制优化_JVM性能优化--Java的垃圾回收机制

一、Java内存结构1、Java堆(Java Heap)java堆是java虚拟机所管理的内存中最大的一块&#xff0c;是被所有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例&#xff0c;这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实…

《linux 网卡别名的添加和绑定》RHEL6

网卡别名的配置&#xff1a; 这个和ifconfig临时修改网卡ip 差不多&#xff0c;但是不一样。都是临时的&#xff0c;只要重启电脑就没了。 配永久的ip别名&#xff1a; cp ifcfg-eth0 ifcfg-eth0:0 vim ifcfg-eth0:0 这样做也能出来&#xff0c;对不对就不知道了 重启网络就ok…