- 浏览: 964991 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
菜鸟学生会:
Spring与dubbo分布式REST服务开发实战网盘地址:h ...
Dubbo与Spring的配合使用 -
奔跑的码侬:
基于 Spring + Dubbo 开发分布式REST服务实战 ...
Dubbo与Spring的配合使用 -
卧槽这是我的昵称麽:
...
MyBatis的parameterType和resultMap -
xiongzhe90:
学习中,赞一个
idea14使用maven创建web工程 -
zqb666kkk:
nice 非常好!
jquery form向spring mvc提交表单
本人目前遇到的一个问题,在公司眼前跑的系统中,有一个项目中设了两个定时器,每天到定时的时候严重影响服务器性能,致使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 699Thread.join(): 用来让主线程等待子线程执行完 ... -
线上故障排查----高内存占用
2017-04-10 20:31 19051. 找出占内存比较大 ... -
Java class文件
2016-12-17 23:08 0做过Java的程序员都知道,Java中的class文件是j ... -
Java类加载机制---类的初始化和卸载
2016-12-09 14:25 2221类的初始化,包括生成对象的初始化和类的静态块的实例化。 ... -
Java类加载机制
2016-12-03 23:43 796类的加载属于Java中的JVM的底层工作。 类加载 ... -
反射机制之---Class对象
2016-12-01 23:59 721Java中的类对象也属于基本部分,类对象即是Class信息 ... -
反射机制之---概念
2016-11-29 00:21 574反射机制是Java语言中很重要的特性,是在运行时获知对象信 ... -
Maven的settings.xml配置
2015-07-09 14:28 2981settings.xml是Maven的配置 ... -
Spring常见错误
2015-06-17 15:37 8561. Spring3.2以上版本引用spring-asm ... -
数据库表生成MyBatis的Mapping文件
2015-01-30 14:15 1666当使用MyBatis的时候,需要每个表建立一 ... -
DatabaseMetaData和ResultSetMetaData
2015-01-30 11:30 792MetaData意即元数据,是描述其他数据的数据。 1. ... -
MyBatis的parameterType和resultMap
2015-01-30 09:32 18353MyBatis的mapping.xml中有两个重要的属性: ... -
Maven仓库镜像
2015-01-29 00:35 889Maven中央服务器地址为 http://maven.ap ... -
数据库表生成MyBatis对应的java类
2015-01-28 18:03 944当数据库中表有多个的时候,写数据库表对应的entity类是 ... -
spring mvc的注解
2015-01-28 15:34 948Spring4新增注解annotation @RestC ... -
ReentrantLock和ReentrantReadWriteLock
2015-01-09 12:39 0在并发访问下,ReentrantLock ... -
log4j的用法
2014-12-01 17:42 6961. 打印错误的详细 stack信息 try{ ... -
Java中keytool的使用
2014-10-26 18:13 1285Keytool是用于管理密钥和证书的工具,位于%JAVA_ ... -
Java实现HTTPS通讯
2014-11-01 21:34 3956Https协议用于在保密性要求高的环境中。 Https基 ... -
Maven常用操作
2014-09-27 11:41 12771. Maven导入依赖的jar包 到project目录 ...
相关推荐
本文将深入探讨如何在C#中通过循环生成XML文档,这一过程对于批量处理数据或动态生成配置文件等场景尤为关键。 ### 核心知识点:C#中循环生成XML文档 #### 1. 初始化XML文档 在C#中,生成XML文档的第一步是创建一...
在文档中,我们通过一个具体的示例来展示如何在Vue.js中实现for循环嵌套操作。 首先,文档中提到了什么是for循环嵌套。在计算机编程中,嵌套循环意味着在一个循环体内使用另一个循环,这样就可以处理多层循环结构的...
在Python中,可以使用`range()`函数生成一个整数序列,供`for`循环遍历,例如`for i in range(5)`会迭代0到4。 **4. 遍历字典:** 在Python中,可以使用`items()`、`keys()`或`values()`方法遍历字典的键值对、键或...
Python中的for循环是编程语言中最常用的控制流结构之一,它用于遍历序列(如列表、元组、字符串)或任何可迭代对象的所有元素。for循环的语法格式如下: ```python for 变量 in 序列或迭代对象: 循环体语句块 ``` ...
在 J2SE 1.5 中,Java 引入了一种新的 for 循环语法,称为“增强的 for 循环”或“foreach 循环”,它提供了一种更简单的方式来遍历数组和 Collection 对象。 传统的 for 循环 在遍历数组时,传统的 for 循环通常...
这种方式可以节省内存,因为生成器不会一次性生成所有结果,而是在需要时逐个产生。 4. **生成器表达式**:生成器表达式类似于列表推导式,但返回的是一个生成器而不是列表。它的语法类似于一个括号包围的数学...
For … in 语句是另一种循环语句,其特点是会在一系列对象上进行迭代(Iterates),即它会遍历序列中的每一个项目 注意: 1、else 部分是可选的。当循环中包含它时,它循环中包含它时,它总会在 for 循环结束后开始...
在编程领域,循环是控制程序流程的关键结构之一,而for循环作为最常见的循环类型,被广泛应用于各种场景。本文将深入探讨for循环的嵌套及其在实际应用中的要点和难点,帮助开发者更好地理解和运用这一技术。 一、...
在编译原理中,我们研究如何将高级编程语言转换为机器可以理解的低级指令集,这个过程通常分为词法分析、语法分析、语义分析和代码生成四个阶段。FOR循环语句是高级语言中常见的一种控制流程结构,用于执行一系列...
通过这个项目,初学者可以加深对Java内置类、控制流(如for循环)以及随机数生成的理解。 1. **Java内置类的运用**: - `Random` 类:用于生成随机数,这是模拟彩票的关键部分。在这个项目中,你需要创建一个`...
在Python编程语言中,`for` 循环是一种常用的控制流结构,用于遍历序列(如列表、元组或字符串)或其他可迭代对象中的每个元素。在这个实例中,我们将探讨如何利用`for`循环来生成新的列表。这种方法被称为列表推导...
本文将详细介绍如何在Vue中利用`v-for`循环实现这一功能。 首先,我们要解决的问题是生成随机颜色。在JavaScript中,我们可以使用Math.random()函数生成0到1之间的随机数,然后乘以256(颜色的最大取值范围)并向下...
2. 通过for循环遍历生成器,每次循环都会自动调用`next()`函数获取下一个元素,直至遍历结束。 ```python for x in g1: print(x) ``` 或者通过其他生成器对象`g2`执行相同操作: ```python for x in g2: print...
9. **列表推导式**:在某些情况下,for循环可以与列表推导式结合,快速生成新的列表。 通过以上介绍,我们可以看到Python的for循环在处理各种数据结构时的灵活性和便利性。在实际编程中,熟练掌握for循环的使用将极...
### Python中的可迭代对象、迭代器、For循环工作机制、生成器 #### 一、可迭代对象与迭代器的区别 为了更好地理解Python中的可迭代对象(iterable)与迭代器(iterator),我们首先需要掌握迭代器协议的基础知识。...
在本项目中,我们将关注如何使用Apache POI来根据预设的Word模板生成包含替换内容、循环列表和图片的动态Word报表。 首先,我们需要理解Apache POI的核心概念。在处理Word文档时,POI提供了HWPF(Horrible Word ...
for 循环也可以使用 range 函数生成一个数字序列作为集合。例如,range(5) 将生成一个从 0 到 4 的数字序列。 在 for 循环中,我们可以使用 break 语句来跳出循环体。break 语句的作用是跳出当前循环体,继续执行...
Python中的for循环是一种非常基础且常用的控制流程结构,它用于遍历任何可迭代对象中的元素。在Python中,可迭代对象包括但不限于列表、元组、字符串、字典以及集合等。接下来,我们将深入探讨for循环的用法及其在...
Python中的for循环语句是编程中最常用的控制结构之一,它用于遍历序列或集合中的每个元素。`for ... in`语句是Python中迭代的一种实现,它可以迭代任何可迭代对象,如列表、元组、字符串等。对于初学者来说,理解和...