- 浏览: 954115 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
菜鸟学生会:
Spring与dubbo分布式REST服务开发实战网盘地址:h ...
Dubbo与Spring的配合使用 -
奔跑的码侬:
基于 Spring + Dubbo 开发分布式REST服务实战 ...
Dubbo与Spring的配合使用 -
卧槽这是我的昵称麽:
...
MyBatis的parameterType和resultMap -
xiongzhe90:
学习中,赞一个
idea14使用maven创建web工程 -
zqb666kkk:
nice 非常好!
jquery form向spring mvc提交表单
在for循环前只生成一次对象可以吗?
- 博客分类:
- basic of java
本人目前遇到的一个问题,在公司眼前跑的系统中,有一个项目中设了两个定时器,每天到定时的时候严重影响服务器性能,致使CPU的占有率达到了100%,有时会宕机,我修改了一下跑定时的程序,如下:
SeoPageTextsBean pageTextBean = new SeoPageTextsBean(); int len = pageTexts.size(); for (int i=0;i<len;i++) { TSeoPageTexts seoPageText = (TSeoPageTexts) pageTexts.get(i); String pageUrl = seoPageText.getPageUrl(); if (pageUrl!=null&&!"".equals(pageUrl)) { pageTextBean.setPageUrl(pageUrl); pageTextBean.setTitle(seoPageText.getTitle()); pageTextBean.setDescription(seoPageText.getDescription()); pageTextBean.setKeywords(seoPageText.getKeywords()); pageTextBean.setH1Text(seoPageText.getH1Text()); pageTextBean.setTopText(seoPageText.getTopText()); pageTextBean.setH2Text(seoPageText.getH2Text()); pageTextBean.setLeftText(seoPageText.getLeftText()); pageTextBean.setBottomText((seoPageText.getBottomText())); String url =AnalyseUrl.analyse(pageTextBean.getPageUrl()); if (url!=null) { url =url.toLowerCase().trim(); if ("".equals(url)){ if(log.isInfoEnabled()){ log("======分析后结果为空字符!===== 原url串为: "+pageTextBean.getPageUrl()); } } else{ SEOPageTexts.SEO_Page_Texts_Map.put(url,pageTextBean ); } } } }
请注意这句 SeoPageTextsBean pageTextBean = new SeoPageTextsBean(); ,我把SeoPageTextsBean对象的生成写在for循环的前边,因为从程序优化的角度考虑,这样可以在程序中只生成一次SeoPageTextsBean的实例,比在for循环中不断地生成新实例的性能上会减少开销,在本机上测试,pageTextBean 在for循环中也有值,就是不知道这样的写法在程序run的时候会不会有什么bug存在,这个请有这方面经验的Jer们给予建议,希望大家能畅所欲言,各抒已见。
评论
4 楼
geeksun
2009-04-27
另外,检查下是不是pageTexts太大了,如果太大了,则需要开一个单独的线程来进行处理,没处理1000(假设值)就sleep一次
这句作何解释?
这句作何解释?
3 楼
geeksun
2009-04-27
多谢上面两位,
# //------------------这段代码可以考虑用BeanUtil代替-------------------
# SeoPageTextsBean pageTextBean = new SeoPageTextsBean();
# pageTextBean.setPageUrl(pageUrl);
# pageTextBean.setTitle(seoPageText.getTitle());
# pageTextBean.setDescription(seoPageText.getDescription());
# pageTextBean.setKeywords(seoPageText.getKeywords());
# pageTextBean.setH1Text(seoPageText.getH1Text());
# pageTextBean.setTopText(seoPageText.getTopText());
# pageTextBean.setH2Text(seoPageText.getH2Text());
# pageTextBean.setLeftText(seoPageText.getLeftText());
# pageTextBean.setBottomText((seoPageText.getBottomText()));
# //---------------------------------------------------------------
这段程序我现在改为用 BeanUtils来操作啦,现在对程序明白了许多。
# //------------------这段代码可以考虑用BeanUtil代替-------------------
# SeoPageTextsBean pageTextBean = new SeoPageTextsBean();
# pageTextBean.setPageUrl(pageUrl);
# pageTextBean.setTitle(seoPageText.getTitle());
# pageTextBean.setDescription(seoPageText.getDescription());
# pageTextBean.setKeywords(seoPageText.getKeywords());
# pageTextBean.setH1Text(seoPageText.getH1Text());
# pageTextBean.setTopText(seoPageText.getTopText());
# pageTextBean.setH2Text(seoPageText.getH2Text());
# pageTextBean.setLeftText(seoPageText.getLeftText());
# pageTextBean.setBottomText((seoPageText.getBottomText()));
# //---------------------------------------------------------------
这段程序我现在改为用 BeanUtils来操作啦,现在对程序明白了许多。
2 楼
vlinux
2009-04-24
看到这样的代码我每次都有想按照自己的风格重新排版的冲动,同时修正了会造成所有Map都引用同一个对象的BUG
可以很明确的说,这段代码如果真的有效率问题,也不会是因为循环语句导致的开销太大
1.检查AnalyseUrl.analyse(pageUrl);
2.检查SEOPageTexts.SEO_Page_Texts_Map.put(url,pageTextBean );
*3.检查是否是由于所有Map都引用同一个对象造成的
另外,检查下是不是pageTexts太大了,如果太大了,则需要开一个单独的线程来进行处理,没处理1000(假设值)就sleep一次
可以很明确的说,这段代码如果真的有效率问题,也不会是因为循环语句导致的开销太大
1.检查AnalyseUrl.analyse(pageUrl);
2.检查SEOPageTexts.SEO_Page_Texts_Map.put(url,pageTextBean );
*3.检查是否是由于所有Map都引用同一个对象造成的
for(TSeoPageTexts seoPageText : pageTexts) { String pageUrl = seoPageText.getPageUrl(); if( null == pageUrl || "".equals(pageUrl) ) { continue; }//if String url = AnalyseUrl.analyse(pageUrl); if( null == url ) { continue; }//if url = url.toLowerCase().trim(); //------------------这段代码可以考虑用BeanUtil代替------------------- SeoPageTextsBean pageTextBean = new SeoPageTextsBean(); pageTextBean.setPageUrl(pageUrl); pageTextBean.setTitle(seoPageText.getTitle()); pageTextBean.setDescription(seoPageText.getDescription()); pageTextBean.setKeywords(seoPageText.getKeywords()); pageTextBean.setH1Text(seoPageText.getH1Text()); pageTextBean.setTopText(seoPageText.getTopText()); pageTextBean.setH2Text(seoPageText.getH2Text()); pageTextBean.setLeftText(seoPageText.getLeftText()); pageTextBean.setBottomText((seoPageText.getBottomText())); //--------------------------------------------------------------- if ("".equals(url)){ logger.info("AnalyseUrl分析后结果为空字符,原url串为: "+pageUrl); } else { SEOPageTexts.SEO_Page_Texts_Map.put(url,pageTextBean ); }//if }//for
另外,检查下是不是pageTexts太大了,如果太大了,则需要开一个单独的线程来进行处理,没处理1000(假设值)就sleep一次
1 楼
luckaway
2009-04-24
放在外面还是每次都会创建SeoPageTextsBean!
而且是你这样写,程序是有错的!
put到Map里是同一个对象!Map里的所有元素都引用同一个对象!
而且是你这样写,程序是有错的!
put到Map里是同一个对象!Map里的所有元素都引用同一个对象!
发表评论
-
Thread.join用法
2017-04-10 20:38 658Thread.join(): 用来让主线程等待子线程执行完 ... -
线上故障排查----高内存占用
2017-04-10 20:31 18641. 找出占内存比较大 ... -
Java class文件
2016-12-17 23:08 0做过Java的程序员都知道,Java中的class文件是j ... -
Java类加载机制---类的初始化和卸载
2016-12-09 14:25 2170类的初始化,包括生成对象的初始化和类的静态块的实例化。 ... -
Java类加载机制
2016-12-03 23:43 760类的加载属于Java中的JVM的底层工作。 类加载 ... -
反射机制之---Class对象
2016-12-01 23:59 680Java中的类对象也属于基本部分,类对象即是Class信息 ... -
反射机制之---概念
2016-11-29 00:21 542反射机制是Java语言中很重要的特性,是在运行时获知对象信 ... -
Maven的settings.xml配置
2015-07-09 14:28 2946settings.xml是Maven的配置 ... -
Spring常见错误
2015-06-17 15:37 8251. Spring3.2以上版本引用spring-asm ... -
数据库表生成MyBatis的Mapping文件
2015-01-30 14:15 1626当使用MyBatis的时候,需要每个表建立一 ... -
DatabaseMetaData和ResultSetMetaData
2015-01-30 11:30 764MetaData意即元数据,是描述其他数据的数据。 1. ... -
MyBatis的parameterType和resultMap
2015-01-30 09:32 18301MyBatis的mapping.xml中有两个重要的属性: ... -
Maven仓库镜像
2015-01-29 00:35 857Maven中央服务器地址为 http://maven.ap ... -
数据库表生成MyBatis对应的java类
2015-01-28 18:03 892当数据库中表有多个的时候,写数据库表对应的entity类是 ... -
spring mvc的注解
2015-01-28 15:34 906Spring4新增注解annotation @RestC ... -
ReentrantLock和ReentrantReadWriteLock
2015-01-09 12:39 0在并发访问下,ReentrantLock ... -
log4j的用法
2014-12-01 17:42 6651. 打印错误的详细 stack信息 try{ ... -
Java中keytool的使用
2014-10-26 18:13 1248Keytool是用于管理密钥和证书的工具,位于%JAVA_ ... -
Java实现HTTPS通讯
2014-11-01 21:34 3906Https协议用于在保密性要求高的环境中。 Https基 ... -
Maven常用操作
2014-09-27 11:41 12461. Maven导入依赖的jar包 到project目录 ...
相关推荐
基于C#下的循环生成XML的方法,仅供学习参考。
For … in 语句是另一种循环语句,其特点是会在一系列对象上进行迭代(Iterates),即它会遍历序列中的每一个项目 注意: 1、else 部分是可选的。当循环中包含它时,它循环中包含它时,它总会在 for 循环结束后开始...
语法格式: for 取值in序列或迭代对象: 语句块 在for循环中,可遍历一个序列或迭代对象的所有元素。...函数range(M,N)会生成一个M到(N-1)个数字列表,for循环就会循环N-1-M次,循环语句块会执行N-1-M。
数据结构为数组中包含对象–树形结构,用Vue组件的写法实现以下的效果: 树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 ...
可迭代对象是每次可以返回其中一个元素的对象, 包括字符串、列表和元组等序列类型,以及字典和文件等非序列类型。还可以使用迭代器和生成器定义可迭代对象 For 循环示例: # iterable of cities cities = ['new york...
主要介绍了Python中的可迭代对象、迭代器、For循环工作机制、生成器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文实例讲述了Python通过for循环理解迭代器和生成器。分享给大家供大家参考,具体如下: 迭代器 可迭代对象 通过 for…in… 循环依次拿到数据进行使用的过程称为遍历,也叫迭代。我们把可以通过 for…in… 语句...
在for循环中,我们可以使用range()函数来生成一个数字序列。range()函数有三个参数:起始值、终止值和步长。如果省略起始值,python循环次数表达全文共7页,当前为第2页。python循环次数表达全文共7页,当前为第2页...
会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如果需要获取数据,可以使用next()函数来获取,但是需要注意,一旦next()函数获取不到数据,会导致出现StopIteration异常错误,可以使用for循环遍历...
前言 Python 中的 for 循环和其他语言中的 for 循环工作方式是不一样的,今天就带你深入了解 Python 的 for 循环,看看它是如何工作的,以及它为...我们可以将这个生成器对象传递给元组构造器,从而可以得到一个元组:
A、const B、NULL C、false D、this E、native 答案:A"C"D"E 判断题 第14题 对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相 同的新对象。 答案:错误 第15题 Java的字符类型采用...
DRAW:一个用于图像生成的循环神经网络 DRAW: A recurrent neural network for image generation (2015) 作者K. Gregor et al. 生成对抗网络 Generative adversarial nets (2014) 作者I. Goodfellow et al. 自编码...
2.读取多张图片:方法1:声明一个放文件地址的数组,并初始化,for循环遍历(文件路径)。3.连接摄像机读取图像并生成代码:助手-->image Acquization-->检测(用笔记本摄像头)-->点击“实时”(图像就...
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。 在 Python 3 中,range() 是像 ...
基本上,我们需要在循环之前构造对象,向循环内的对象发送消息,并在循环之后销毁对象。 %例子: N = 100000; WaitMessage = parfor_wait(N, 'Waitbar', true); parfor i = 1: N WaitMessage.Send; 暂停(0.002...
使用此插件用户可以根据自己网站的需求来拓展验证码字符的范文,将所需要拓展的字符放在$chars中即可,同时需要在for循环中做相应的调整。 注意确保$bg_flie的路径文件地址为验证码背景图片的地址。 验证码图片的...
pyhon集合,切片,生成器等演示 # for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是# list还是其他数据类型.......
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。...这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。 1|2判断是否可以迭代 可以使用 isinstance() 判断一个对象是否是 Itera
1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么?voidmain正确吗? 1.27 我的编译器总在报函数原型不匹配的错误,可我觉得没什么问题。这是为什么? 1.28 文件...