相关疑难解决方法(0)

在Java中分析本机方法 - 奇怪的结果

我一直在使用Yourkit 8.0来分析在Mac OS X(10.5.7,Apple JDK 1.6.0_06-b06-57)下运行的数学密集型应用程序,并注意到CPU分析结果中有一些奇怪的行为.

例如 - 我使用抽样进行了分析运行,其中报告了应用程序的10分钟运行时的40%用于StrictMath.atan方法.我发现这令人费解,但我接受了它的话,花了一点时间用非常简单的多项式拟合替换atan.

当我再次运行应用程序时,它几乎与以前完全相同(10分钟) - 但我的atan替换在分析结果中无处可见.相反,其他主要热点的运行时百分比只是增加以弥补它.

总结一下:

结果使用StrictMath.atan(本机方法)
总运行时间:10分钟
方法1:20%
方法2:20%
方法3:20%
StrictMath.atan:40%

结果简化,纯Java atan
总运行时间:10分钟
方法1:33%
方法2:33%
方法3:33%

(方法1,2,3不执行任何atan调用)

知道这种行为是什么吗?我使用EJ-Technologies的JProfiler获得了相同的结果.似乎JDK概要分析API报告了本机方法的不准确结果,至少在OS X下是这样.

java macos profiling native yourkit

5
推荐指数
1
解决办法
778
查看次数

如何提高我的软件项目的速度?

我和我的同学用Java做了一个学校的软件项目.我们将信息存储在远程数据库中.

当我们启动应用程序时,我们从数据库中提取所有信息并将其转换为在我们的应用程序中使用的对象(使用java sql statemens).在应用程序中,我们编辑了一些这些对象,然后当我们退出应用程序时,我们使用Hibernate保存或更新数据库中的信息.

如您所见,我们不使用Hibernate来提取信息,我们仅将其用于保存和更新.

我们有2个但非常相似的问题.对象的加载(当我们启动应用程序时)和在db中保存对象(使用Hibernate)(关闭应用程序时)花费了太多时间.我们的项目不是一个庞大的企业应用程序,它是一个非常小的应用程序,我们只管理一些学生,教师,家庭作业和测试.所以我们的数据库也非常小.我们怎样才能提高性能?

稍后编辑:如果我们使用本地数据库它运行得非常快,它在远程数据库上运行速度很慢

java database performance hibernate

5
推荐指数
1
解决办法
881
查看次数

在C中复制字符串中获取null char的最快方法

我需要获取指向字符串的终止空字符的指针.

目前我正在使用这种简单的方式:MyString + strlen(MyString)这可能是非常好的脱离上下文.

但是我对这个解决方案感到不舒服,因为我必须在字符串复制之后这样做:

char MyString[32];
char* EndOfString;
strcpy(MyString, "Foo");
EndOfString = MyString + strlen(MyString);
Run Code Online (Sandbox Code Playgroud)

所以我在字符串周围循环两次,第一次进入strcpy,第二次进入strlen.

我想通过返回复制字符数的自定义函数来避免这种开销:

size_t strcpylen(char *strDestination, const char *strSource)
{
    size_t len = 0;
    while( *strDestination++ = *strSource++ )
        len++;
    return len;
}

EndOfString = MyString + strcpylen(MyString, "Foobar");
Run Code Online (Sandbox Code Playgroud)

但是,我担心我的实现可能比编译器提供的CRT函数慢(可能使用一些程序集优化或其他技巧而不是简单的char-by-char循环).或者我可能不知道一些标准的内置功能已经做到了吗?


我做了一些可怜的男人标杆,迭代0x1FFFFFFF倍三种算法(strcpy+ strlen,我的版本strcpylen,以及版本user434507).结果是:

1)strcpy+ strlen是胜利者,只有967毫秒;

2)我的版本需要更多:57秒!

3)编辑版需要53秒.

因此,在我的环境中使用两个CRT功能而不是自定义"优化"版本的速度要快50倍!

c string performance crt

4
推荐指数
2
解决办法
852
查看次数

处理:如何提高程序的帧率?

所以我现在已经在Processing工作了几个星期,虽然我没有编程方面的经验,但我已经转向了更复杂的项目.我正在编程一个进化模拟器,它会生成具有随机属性的生物.

最终,我将添加复制品,但截至目前,这些生物只是漂浮在屏幕周围,并且稍微跟着鼠标.它与来自线路的声音相互作用,但我对这些部分进行了评论,以便可以在画布上查看,它不应该真正改变问题,我只是想我会指出它.

截至目前,帧速率对我来说远非理想,随着更多生物的产生,它逐渐降低.我是否犯了一些基本错误,或者我只是每帧运行太多功能?

这里的源代码,你可以在浏览器中玩它在这里:

//import ddf.minim.*;
//import ddf.minim.signals.*;
//import ddf.minim.analysis.*;
//import ddf.minim.effects.*;

//Minim minim;
//AudioInput in;
boolean newCreature = true;
boolean matured[];
int ellipses[];
int hair[];
int maxCreatureNumber = 75;
//int volume;
//int volumeTolerance = 1;
int creatureIndex = -1;
int creatureX[];
int creatureY[];
float strokeWeightAttribute[];
float creatureSize[];
float creatureEndSize[];
float creatureXIncrement[];
float creatureYIncrement[];
float bubbleSize;
float easing = 0.05;
float angle = 0.00;
color colorAttribute[];

void setup() {
    background(0);
    size(1000,500);
    noFill();
    //minim = new Minim(this); …
Run Code Online (Sandbox Code Playgroud)

processing optimization

4
推荐指数
3
解决办法
6704
查看次数

维基百科A*寻路算法需要花费大量时间

我已经在C#中成功实现了A*pathfinding,但它很慢,我不明白为什么.我甚至尝试不对openNodes列表进行排序,但它仍然是相同的.

地图是80x80,有10-11个节点.

我从维基百科那里拿了伪代码

这是我的实施:

 public static List<PGNode> Pathfind(PGMap mMap, PGNode mStart, PGNode mEnd)
    {
        mMap.ClearNodes();

        mMap.GetTile(mStart.X, mStart.Y).Value = 0;
        mMap.GetTile(mEnd.X, mEnd.Y).Value = 0;

        List<PGNode> openNodes = new List<PGNode>();
        List<PGNode> closedNodes = new List<PGNode>();
        List<PGNode> solutionNodes = new List<PGNode>();

        mStart.G = 0;
        mStart.H = GetManhattanHeuristic(mStart, mEnd);

        solutionNodes.Add(mStart);
        solutionNodes.Add(mEnd);

        openNodes.Add(mStart); // 1) Add the starting square (or node) to the open list.

        while (openNodes.Count > 0) // 2) Repeat the following:
        {
            openNodes.Sort((p1, p2) => p1.F.CompareTo(p2.F));

            PGNode current = openNodes[0]; …
Run Code Online (Sandbox Code Playgroud)

.net c# optimization a-star path-finding

3
推荐指数
2
解决办法
5651
查看次数

有没有关于削减Java中CPU使用率的建议?

我写了一个Java程序来下载HTML页面.但CPU使用率接近100%,而网络使用率低于3%.好像CPU成了我的瓶颈.如何削减CPU使用率?

java cpu-usage

2
推荐指数
2
解决办法
857
查看次数

低开销的Ruby分析?

我有一个Ruby程序,大约需要4分钟才能完成任务,我想把它降到1分钟以下.

我尝试了宝石中的ruby-prof,但是它使运行时间增加到约30分钟,甚至看起来都没有特别好地保持单调性(一些变化可靠地提高了性能 - 使用剖析器并且可靠地降低了性能 - 没有剖析器).此任务也无法真正分解为可以独立进行有意义分析的部分.

目前以最低开销分析Ruby代码的最佳方法是什么?

我使用OSX,但如果由于任何原因,探测器需要另一个操作系统,我可能会重新启动.

编辑:perftools.rb具有更低的开销,但结果看起来相当可疑诚实,超出任何合理的抽样错误 - 至少它必须搞乱GC或i/o缓冲或类似的东西,导致很多愚蠢的错误归因.它仍然击败了ruby-prof.

我会保持问题公开,万一有人知道比这更好的事情.

ruby profiling ruby-prof

2
推荐指数
1
解决办法
1305
查看次数

如何使用Firebug来分析导致页面加载速度慢的原因?

我正在开发一个复杂的页面,其中包含多个脚本,CSS文件,大量动态生成的HTML,脚本加载脚本以及各种疯狂的东西.当然,页面有时会加载很慢.

我发现很难实时地告诉它究竟是什么减慢了它.可以萤火虫的'网络’选项卡帮助我?当然,我已经查看了"网络"标签,但它似乎只是在加载显示文件.还有其他工具可以帮助我吗?我想要的是能够看到页面仍在加载,并确切地看到仍在加载的内容.

FireFox的状态栏告诉我一点......它说"等待www.mydomain.net",但它并没有告诉我它正在等待哪个文件.我假设有一个文件是这里的瓶颈,这会阻止所有后续文件加载,但我承认,我不太了解浏览器如何获取文件的细节.

browser performance firebug

1
推荐指数
1
解决办法
3775
查看次数

分析Java EE1.5或SE1.6

我是Java新手,我想问一下.

在服务器上配置应用程序是否有意义,我只有控制台?

有没有合理的控制台分析器?

或者我应该只在localhost上分析应用程序?

java profiling

1
推荐指数
1
解决办法
851
查看次数

分析Java Web Start应用程序

有很多java profilers,有什么建议可以最好地分析一个在战争中部署到glassfish的java web start应用程序?

java profiling java-web-start

1
推荐指数
1
解决办法
1547
查看次数

需要一个免费的Java方法执行分析器,它可以在Windows上与Eclipse一起使用

我已经阅读了关于Java分析器的其他几个问题,但我没有找到任何符合我需求的东西.

以下是我需要的功能:

  • 适用于Java 1.6.0_18(32位)的Java分析器
  • 免费用于商业用途(我的组织不允许试用软件)
  • 能够显示方法执行时间,以便找到瓶颈(这将是我对分析器的主要用途)
  • 播放与Eclipse不错(我的单位使用NetBeans)
  • 适用于Windows XP

此外,这些功能将"很高兴":

  • 图形显示,而不是文本输出
  • 能够显示内存和CPU使用情况
  • 能够分析我从Eclipse手动启动的JUnit的执行情况,而不是分析服务器(例如Tomcat)
  • 也适用于Linux

根据另一个问题的建议,我刚刚下载了VisualVM 1.3并试用了它.它在我的工作站上无法正常工作,并且没有与Eclipse很好地集成,因此一个不在我的列表中.

有什么建议?

java eclipse profiler

0
推荐指数
1
解决办法
2008
查看次数

查找运行缓慢的代码

我安装了一个多线程Java Web应用程序,并承担了加速它的任务。我试图通过添加日志记录语句来找出哪些部分导致了性能问题,但这并没有解决。

因此,我现在正在寻找一种工具(我想是探查器),它可以帮助我找到造成性能问题的代码。理想情况下,我希望能够启动该应用程序,执行一些操作,然后查看一个报告,该报告向我显示在哪里执行时间是由类/方法花费的。

由于预算限制,我只能使用免费工具或提供试用期的工具。

java performance profiling

-1
推荐指数
1
解决办法
4038
查看次数