Tag: 优化

我如何使用Drools Planner?

我有一个日程安排问题,每个学生表达他对讲座的偏好,同时为所有学生生成课程时间表(如果可能的话,以批处理模式)。 根据我的阅读和理解,Drools Planner非常适合解决此类问题。 我在我的Eclipse IDE中安装了Drools和GEF。 一切都很好。 不幸的是,我无法弄清楚如何构建一个简单的项目。 我在网上寻找参考资料,并找到了Drools Planner的例子,这些例子看起来很棒。 但是,除了一些代码片段之外,我没有找到任何可以引导人们完成简单案例的好教程。 如何为匹配/日程安排问题建模,其中3名具有独特时间和课程偏好的学生希望注册4门课程? 我如何启动代码,在哪里放置约束,我调用哪些类,等等? 任何帮助将不胜感激!! 谢谢!!

为什么Method访问看起来比Field访问快?

我正在做一些测试,以找出使用getter / setter和直接字段访问之间的速度差异。 我写了一个简单的基准测试应用程序: public class FieldTest { private int value = 0; public void setValue(int value) { this.value = value; } public int getValue() { return this.value; } public static void doTest(int num) { FieldTest f = new FieldTest(); // test direct field access long start1 = System.nanoTime(); for (int i = 0; i […]

查找字符串中最常见字符的更有效方法

我创建了一种方法来查找字符串中最常见的字符: public static char getMax(String s) { char maxappearchar = ‘ ‘; int counter = 0; int[] charcnt = new int[Character.MAX_VALUE + 1]; for (int i = 0 ; i = counter) { counter = charcnt[ch]; maxappearchar = ch; } } System.out.println(“the max char is ” +maxappearchar + ” and displayed ” +counter+ ” times”); […]

Java优化器和冗余arrays评估

这是关于Java优化的一个非常基本的问题。 如果你有一个简单的for循环迭代数组并在循环的头部使用array.length而不是之前评估它,那么你只做一次(这是我几乎总是这样做): for(int i=0; i<array.length;i++) { … } 可以对语句进行优化,以便JVM知道数组是否在循环的持续时间内发生变化,这样它每次都不会重新评估array.length吗?

Java用+优化字符串连接多少钱?

我知道在最近的Java版本中字符串连接 String test = one + “two”+ three; 将优化使用StringBuilder 。 但是,每次遇到这一行时都会生成一个新的StringBuilder还是会生成一个Thread Local StringBuilder然后用于所有字符串连接? 换句话说,我是否可以通过创建自己的线程本地StringBuilder来重新使用经常调用的方法的性能,或者这样做会不会有显着的增益? 我可以为此编写一个测试,但我想知道它是否可能是编译器/ JVM特定的或者可以更普遍地回答的问题?

Java将枚举编译成什么?

我和同事讨论了Java如何代表枚举。 我的印象是他们像C / C ++一样严格要求。 或者,如果添加行为(Type-Safe枚举),它将被包装在一个类中。 他认为,如果它足够小,Java会将其压缩到一个字节。 但是,我在Oracle网站上发现了这个: Java编程语言枚举远比其他语言中的对应程序更强大,这些语言只不过是美化整数。 新的枚举声明定义了一个完整的类(称为枚举类型)。 我认为它们是实际的物体。 如果是这样,有没有办法优化它们以节省空间? 谢谢 编辑:正如Jon对答案的评论中提到的,我是在Enum的序列化大小之后。

HotSpot可以内联lambda函数调用吗?

考虑代码: someList.forEach(x -> System.out.format(“element %s”, x)); 从理论上讲,应该可以通过首先内联forEach方法来内联此代码并消除间接函数调用,然后在内联的forEach代码中内联lambda函数体。 HotSpot能够执行此优化吗? 在特定情况下是否执行了哪些限制?

Java中是否存在GC并未引入延迟(停止世界)或者同时运行100%?

只是好奇。 我听说过有关新的G1GC解决延迟问题的事情。 我不能/不想使用RTSJ。 提前致谢

用于重复方法调用的Java编译器优化?

java编译器(JDK1.6.0_21中的默认javac)是否会优化代码以防止使用相同的参数一遍又一遍地调用相同的方法? 如果我写了这段代码: public class FooBar { public static void main(String[] args) { foo(bar); foo(bar); foo(bar); } } 方法foo(bar)只会运行一次吗? 如果是这样,有没有办法阻止这种优化? (我试图比较运行时的两个算法,一个迭代和一个比较,我想多次调用它们来获得一个代表性的样本) 任何见解都会非常感激; 我把这个问题带到了疯狂的地步(虽然我的计算机很快就疯了,所以我继续添加方法调用,直到我在43671行得到code too large错误)。

在java中跟随if-else梯的更好的替代方法是什么?

情况:我正在检查文件名,文件名存储在名为str的String变量中,并根据if语句中检查的条件设置名为mailType的变量的值。 if(str.contains(“template”)) { if(str.contains(“unsupported”)) mailType=”unsupported”; else if(str.contains(“final_result”)) mailType=”final_result”; else if(str.contains(“process_success”)) mailType=”Process Success”; else if(str.contains(“receive”)) mailType=”Receive”; else if(str.contains(“sen”)) mailType=”sent”; else if(str.contains(“welcome”)) mailType=”welcome”; else if(str.contains(“manual”)) mailType=”Manual”; } else if(str.contains(“properties”)) { if(str.contains(“unsupported”)) mailType=”unsupported”; else if(str.contains(“final_result”)) mailType=”final_result”; else if(str.contains(“process_success”)) mailType=”Process Success”; else if(str.contains(“receive”)) mailType=”Receive”; else if(str.contains(“sen”)) mailType=”sent”; else if(str.contains(“welcome”)) mailType=”welcome”; else if(str.contains(“manual”)) mailType=”Manual”; } 问题:有没有更好的方法在java中缩短我的代码并且内存友好?