![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java性能优化
文章平均质量分 88
Java我人生
java我人生,即使跑在路上被拌倒无数次,也不要规规矩矩走一辈子,岁月不止,奋斗不息,在为生活奔波的同时更希望为技术而痴狂,能够拥有自己的一家互联网公司!
展开
-
oracle索引原理(b-tree,bitmap,聚集,非聚集索引)
一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。 对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)都具有两个字段。第一个字段表示当前该分支节点块下面所链接的索引块中所包转载 2015-09-01 08:57:30 · 4979 阅读 · 0 评论 -
HashSet,TreeSet 和 LinkedHashSet比较
一、Set回顾一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合。Set不包含满 a.equals(b) 的元素对a和b,并且最多有一个null。泥瓦匠的记忆宫殿:1、不允许包含相同元素2、判断对象是否相同,根据equals方法二、HashSet一个按着Hash算法来存储集合中的元素,其元素值可以是NULL。它不能保证元素的排列顺序。同样,H翻译 2015-04-09 13:22:21 · 1929 阅读 · 0 评论 -
玩转图片Base64编码
引言 图片处理在前端工作中可谓占据了很重要的一壁江山。而图片的Base64编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的base64编码。标题略大,不过只是希望通过一些浅显的论述,让你知道什么是图片的base64编码,为什么我们要用它,我们如何使用并且方便的使用它,并让你懂得如何去在前端的实际工作中运用它。 什么是base64编码? 我不是来讲概翻译 2015-03-31 22:36:09 · 3415 阅读 · 0 评论 -
代码典型缺陷分析—代码质量分析会上的报告
前几天事业部召开代码质量分析会,其中一个环节就是讲解一下一些产品的开发过程中一些代码缺陷,让我们的研发人员代码编写更加规范,是的,这个环节是我讲解的。 非常感谢部门经理给与我这个机会,这是我很好的一次锻炼机会,也是经理对我的信任,所以我不能辜负经理对我的信任,不能浪费掉这次锻炼的机会,也不能丢我们部门的脸。尽管时间很紧张,准备时间很短,但我还是抽掉了好几个大晚上就准备它。开会的前原创 2015-03-08 16:29:32 · 3260 阅读 · 0 评论 -
Dom4j解析xml文件-递归遍历所有节点和属性
引言 Dom4j是java中常用读取xml文件的工具,就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇文章 java解析XML的四种方式及比较,相关jar包可免费下载:dom4j-1.6.1.jar,下边我就分享一下用Dom4j对xml文件进行遍历,一看代码就明白了,注释的很详细。被测试的xml文件test.xml原创 2015-03-17 22:00:01 · 94001 阅读 · 30 评论 -
json日期格式转换
开发中,往往在后台把带有日期类型的一些数据直接转成json然后绑定到前台的样式列表控件里,在控件里获取或者绑定时,Date类型往往都变成了如{"date":26,"day":1,"hours":11,"minutes":30,"month":9,"seconds":18,"time":1256527818296,"timezoneOffset":-480,"year":109}这样的格式,js原创 2015-03-12 21:15:55 · 17273 阅读 · 2 评论 -
Java不同压缩算法的性能比较
Java不同压缩算法的性能比较本文将会对常用的几个压缩算法的性能作一下比较。结果表明,某些算法在极端苛刻的CPU限制下仍能正常工作。文中进行比较的算有:JDK GZIP ——这是一个压缩比高的慢速算法,压缩后的数据适合长期使用。JDK中的java.util.zip.GZIPInputStream / GZIPOutputStream便是这个算法的实现。JDK deflate转载 2015-01-04 21:04:25 · 1445 阅读 · 0 评论 -
Integer.valueOf(String)方法字符串转整型- 你肯定不知道的疑惑!
有个仁兄在 StackOverflow 上发起了一个问题,是这么问的:“ 我被下面的代码搞晕了,为什么它们会返回不同的值?”123System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));System.out.println(Integer.v翻译 2015-02-14 23:07:29 · 5240 阅读 · 0 评论 -
JProfiler的详细使用介绍(JVM对象内存线程监测工具)
一、安装JProfiler 从http://www.ej-technologies.com/下载5.1.2并申请试用序列号 二、主要功能简介1.内存剖析 Memory profiler JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。转载 2015-03-12 21:07:28 · 21586 阅读 · 1 评论 -
10个对开发项目有害的编程习惯
避免这些常见的编码习惯,会让我们的工作更轻松、软件更安全且更易于扩展。帕雷托法则明确指出,20%的因导致80%的果。又称为80-20法则,它适用于几乎每一个需要人作为劳动主体的相关领域。在软件开发领域,这个法则可以概括为,大多数的问题都是由少数不良编码习惯造成的。改变这些习惯,你会更有效率。10个对开发项目有害的编程习惯下面讲讲最要不得的10条编码习惯:1.拼写错误让我原创 2015-04-27 09:13:01 · 3362 阅读 · 4 评论 -
java6,7,8中String.intern进化史与深度剖析
这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 中做了哪些调整。字符串池字符串池(有名字符串标准化)是通过使用唯一的共享 String 对象来使用相同的值不同的地址表示字符串的过程。你可以使用自己定义的 Map<String, String> (根据需要使用 weak 引用或者 soft 引用)并使用翻译 2015-05-14 08:48:23 · 2937 阅读 · 0 评论 -
深入分析java线程中的volatile
Volatile关键字平时在阅读jdk源码的时候,经常看到源码中有写变量被volatile关键字修饰,但是却不是十分清除这个关键字到底有什么用处,现在终于弄清楚了,那么我就来讲讲这个volatile到底有什么用吧。当一个变量被定义为volatile之后,就可以保证此变量对所有线程的可见性,即当一个线程修改了此变量的值的时候,变量新的值对于其他线程来说是可以立即得知的。可以理解成:对vola翻译 2015-06-18 08:55:57 · 2871 阅读 · 0 评论 -
JVM垃圾收集相关常用参数
参 数 描 述 UseSerialGC 虚拟机运行在Client 模式下的默认值,打开此开关后,使用Serial +Serial Old 的收集器组合进行内存回收 UseParNewGC 打开此开关后,使用ParNew + Serial Old 的收集器组合进行内存回收 UseConcMarkS原创 2015-07-03 08:54:14 · 2288 阅读 · 0 评论 -
使用Memcached改进Java企业级应用性能:架构和设置
Memcached由Danga Interactive开发,用来提升LiveJournal.com网站性能。Memcached分布式架构支持众多的社交网络应用,Twitter、Facebook还有Wikipedia。在接下来的两部分教程中,Sunil Patil介绍了Memcached分布式哈希表架构,以及利用它帮助你为数据驱动Java企业应用做数据缓存。本文介绍了如何利用Memcache翻译 2015-07-23 08:57:03 · 1903 阅读 · 0 评论 -
一次非常有意思的SQL优化经历:从30248.271s到0.001s
场景我用的数据库是mysql5.6,下面简单的介绍下场景课程表create table Course(c_id int PRIMARY KEY,name varchar(10))数据100条学生表:create table Student(id int PRIMARY KEY,name varchar(10))数据70000条翻译 2015-05-19 08:42:15 · 4558 阅读 · 6 评论 -
Linux与JVM的内存关系分析
引言在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m。从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示。同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了?翻译 2015-07-01 08:51:03 · 4868 阅读 · 6 评论 -
Nginx优化详细,应对高并发
nginx指令中的优化(配置文件)worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数。worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu,上例中将8个进程分配到8个cp原创 2015-07-16 08:48:21 · 16631 阅读 · 3 评论 -
一致性hash算法在memcached中的使用
一、概述 1、我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择。与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储。一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置。 2、常规hash算法的应用以及其弊端原创 2015-08-13 09:05:52 · 2850 阅读 · 0 评论 -
JVM中java类的加载时机
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用原创 2015-07-28 08:47:12 · 3605 阅读 · 2 评论 -
Java文件读写IO/NIO及性能比较总结
干Java这么久,一直在做WEB相关的项目,一些基础类差不多都已经忘记。经常想得捡起,但总是因为一些原因,不能如愿。其实不是没有时间,只是有些时候疲于总结,今得空,下定决心将丢掉的都给捡起来。文件读写是一个在项目中经常遇到的工作,有些时候是因为维护,有些时候是新功能开发。我们的任务总是很重,工作节奏很快,快到我们不能停下脚步去总结。文件读写有以下几种常用的方法1、字节读写(Inpu转载 2015-03-11 22:59:26 · 21371 阅读 · 0 评论 -
数组转List-典型代码缺陷分析(三)
以上为开发过程中,部分程序猿数组转list的“笨”方法,为什么说笨呢,因为这样做代码很繁琐不简练容易出错可读性叫差,而且还比较耗时,因为我要一个一个遍历数组,然后把这个元素添加到list中(不过以上代码还有几点,最好给ArrayList指定一个初始容量,注意和LinkedList的区别,以及split方法使用的效率和可能内存泄漏问题,此文不再详述,此处重点解读数组转list)。 其原创 2015-03-20 22:57:23 · 2407 阅读 · 1 评论 -
预处理语句的使用-代码典型缺陷分析(一)
BAD: 尽管这块代码能够正确执行,能够完成都应的业务逻辑的处理,但这个预处理语句使用是有问题的。因为这个SQL语句是动态拼接而来的,这样处理和Statement直接处理几乎一点区别也没有,一点也没体现出运用PrearedStatement的优势。 正确使用是以参数化的形式给preparedStatement传参数,而不是动态拼接SQL语句,如下:原创 2015-03-08 17:08:13 · 3885 阅读 · 0 评论 -
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它。做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策。在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识。 人人都要了解。----------------------转载 2015-02-02 20:59:44 · 5688 阅读 · 1 评论 -
再论java程序性能小优化(太多了,网上到处都是,不多说,略说一二,我经常不注意的小项!我的博客处女作)
经常来CSDN看看各个技术专家们的博客,确实是太多的牛人了,经常为他们独特的见解或者层层深入的分析感到高兴感到欣喜,每遇到这种技术文章,都会耐心的品味和学习!我承认,自己还是一个初出茅庐的程序猿毕业生,游览器收藏夹满满的全是各种技术文章技术问题的收藏,还分着各种文件夹,自己确“懒得”也写写博客记录自己的见解和学到的知识和大家一块分享,也许是没养成习惯吧,这种技术类的,这种电子式的习惯,有点效率低的原创 2015-01-05 21:06:27 · 1142 阅读 · 1 评论 -
用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
JDK提供了几个很实用的工具,如下:jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式:jinfo 进程pidjps:用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。命令格式:jps 或 jps 远程服务ip地址 (默认端口1099)转载 2015-02-02 22:30:37 · 3782 阅读 · 0 评论 -
压力测试工具JMeter入门教程
1.Jmeter 概要描叙jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台。多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用,估计是不要钱吧,哈哈,功能上来说,整个平台实现了许多和互联网相关的网络测试组件,同时还保留着很强的扩展性方便用于一些非标准的测试场景,让伟大的程序猿同学来告诉它该如何工作。下面我们开始。2.Jmeter 基本界面和组件的概念转载 2015-02-02 22:14:58 · 258129 阅读 · 15 评论 -
利用 Java dump 进行 JVM 故障诊断 (转IBM官网)
引言对于大型 java 应用程序来说,再精细的测试都难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的运行状态并将其存储在转储(dump)文件中,从而为我们分析和诊断问题提供了重要的依据。常见的转储文件包括 Java Dump, Heap dump 和 System转载 2015-02-02 22:22:22 · 4620 阅读 · 0 评论 -
如何写出高性能SQL语句—优化SQL查询
1、 首先要搞明白什么叫执行计划?执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 “全表扫描”方式。可见,执行计划并不是固定的,它是“个性化的”。产生一个转载 2015-01-11 13:17:27 · 5526 阅读 · 0 评论 -
程序员老鸟写sql语句的经验之谈、百万数据查询优化技巧三十则
一、程序员老鸟写sql语句的经验之谈做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等。因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为公司衡量程序员技术水平的标准。我们程序员不是dba,不需要时刻关注sql运行时间,想方设法优化表结构,存储空间,优化表读取速度等等,但是在开发系统时,时刻保转载 2015-01-11 13:29:01 · 10802 阅读 · 0 评论 -
Java内存泄露监控检测工具-- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到 当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现转载 2015-01-28 14:31:59 · 7981 阅读 · 0 评论 -
String中substring方法内存泄漏问题
众所周知,JDK中以前String类中的substring方法存在内存泄漏问题,之所以说是以前,是因为JDK1.7及以后的版本已经修复了,我看都说JDK1.6的版本也存在这个问题,但是我本机上安装的1.6看了看源码不存在内存泄漏问题啊,又看了1.7的源码,和我本机的1.6的一样,是不是我的1.6版版其实是1.7的?!唉,不管了,反正1.7版本肯定没有这个问题(1.5及更老版本肯定有)了,大家就放心原创 2015-02-08 21:12:01 · 7021 阅读 · 2 评论 -
如何高效地判断数组中是否包含某特定值
如何检查一个未排序的数组中是否包含某个特定值,这是一个在Java中非常实用并且频繁使用的操作。另外,这也是Stack Overflow上面非常受关注的问题。在得票数最多的答案中,可以看到,检查数组中是否包含特定值可以用多种不同的方式实现,但是时间复杂度差别很大。下面,我将为大家展示各种方法及其需要花费的时间。1.检查数组中是否包含特定值的四种不同方法1)使用List:翻译 2015-02-11 23:25:22 · 4596 阅读 · 0 评论 -
循环体中用“+”拼接字符串-代码典型缺陷分析(二)
如上图所示,在一个循环体中用“+”动态拼接字符串,这是我们开发中非常的忌讳的方式,虽然它也能达到我们想要的效果但是性能上包括时间和内存都造成了很大程度的浪费,尤其是访问量很高的循环次数很多的情况下,很容易引起内存溢出。 因为“+”拼接字符串,每拼接一次都是再内存重新开辟一个新的内存区域(堆里边),然后把得到的新的字符串存在这块内存,字符串如果很大,循环次多又多,那么浪费了很多时间和原创 2015-03-16 22:04:30 · 13063 阅读 · 1 评论 -
JVM性能优化,提高Java的伸缩性
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。主流的硬件服务器提供了大量的内存分布式系统有大量内存的需求,而且该需求在持续增长一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务翻译 2015-03-20 22:37:50 · 2416 阅读 · 0 评论 -
如何设置Tomcat的JVM虚拟机内存大小优化JVM
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择自己的需要选择不同的操作系统和对应的JDK的版本(只要是符合Sun发布的Java规范的),但我们推荐您使用Sun公司发布的JDK。确保您所使用的版本是最新的,因为Sun公司和其它一些公司一直在为提高性能而对java虚拟机做一些升级改进。一些报告显示JDK1.4在性能上比JDK1.3提高了将近10转载 2015-03-08 22:22:54 · 4598 阅读 · 0 评论 -
java虚拟机JVM内存的配置与调优
JVM内存的设置的原理默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。java -Xms64m -Xmx256m Test-Xms是设置内存初始化的大小-Xmx是设置最大能够使用内存的大小(最好不要超过转载 2015-03-08 23:59:15 · 1458 阅读 · 0 评论 -
哪种Map遍历方法更优?!—Map遍历方法的正确选择
我们都知道遍历Map一般有3种方法,values(),keySet()和entrySet(),常见的是keySet用的多,简单容易理解,entrySet()是返回Map中的静态内部类Entry类类型的Set实例,当然了你别说forEach,forEach只是一种代替for(int i=0;;)和while()遍历的一种方式,底层也是用迭代器实现的,只不过把部分东西隐藏了,建议大家平常开发中能用fo原创 2015-03-05 21:01:07 · 13739 阅读 · 2 评论 -
StringBuilder性能真的优于StringBuffer?!!!!
大家都知道,StringBuilder和StringBuffer主要区别是前者不是线程安全的,后者是线程安全的,余JDK预留的对外接口几乎是一模一样的,所以在确定线程安全的环境的前提下,优先使用SringBuilder,肯定不相同条件下的StringBuffer性能要高,因为那维护同步数据的正确性肯定要消耗资源的。 然而在今天的事业部代码质量报告会上,我在讲解StringBuild原创 2015-03-05 21:16:05 · 8894 阅读 · 6 评论 -
Java HashMap的工作原理
面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下HashMap内部的工作原理。首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的。我们来看个非常简单的例子。有一个”国家”(Country)类,我们将要用Country对象翻译 2015-03-01 17:00:54 · 1757 阅读 · 0 评论 -
java中字符串String的深入浅出
大家知道我们在java中定义一个字符串是这样定义的 String str=”abc”;然而还可以这样来定义 String str=new String(“abc”);那么这两者的区别是什么呢?我们先来看看代码:String str="abc"; String str1=new String("abc"); System.out.println(str转载 2015-02-26 21:26:20 · 1822 阅读 · 1 评论