Java CPU上什么更高效?这样的差别值得吗?

Java CPU上什么更高效?这样的差别值得吗?,java,Java,我想知道创建重复代码以避免变量在CPU上是否更有效,如果是,是否值得重复下面的示例代码 我目前有以下情况: c.set("arenas."+name+".team"+team+".world", loc.getWorld().getName()); c.set("arenas."+name+".team"+team+".x", loc.getX()); c.set("arenas."+name+".team"+team+".y", loc.getY()); c.set("arenas."+nam

我想知道创建重复代码以避免变量在CPU上是否更有效,如果是,是否值得重复下面的示例代码

我目前有以下情况:

c.set("arenas."+name+".team"+team+".world", loc.getWorld().getName());
c.set("arenas."+name+".team"+team+".x", loc.getX());
c.set("arenas."+name+".team"+team+".y", loc.getY());
c.set("arenas."+name+".team"+team+".z", loc.getZ());
c.set("arenas."+name+".team"+team+".pitch", loc.getPitch());
c.set("arenas."+name+".team"+team+".yaw", loc.getYaw());3
以下是CPU上的速度更快吗。它执行与上面代码相同的操作:

if(team == 1) {
    c.set("arenas."+name+".team1.world", loc.getWorld().getName());
    c.set("arenas."+name+".team1.x", loc.getX());
    c.set("arenas."+name+".team1.y", loc.getY());
    c.set("arenas."+name+".team1.z", loc.getZ());
    c.set("arenas."+name+".team1.pitch", loc.getPitch());
    c.set("arenas."+name+".team1.yaw", loc.getYaw());
}else {
    c.set("arenas."+name+".team2.world", loc.getWorld().getName());
    c.set("arenas."+name+".team2.x", loc.getX());
    c.set("arenas."+name+".team2.y", loc.getY());
    c.set("arenas."+name+".team2.z", loc.getZ());
    c.set("arenas."+name+".team2.pitch", loc.getPitch());
    c.set("arenas."+name+".team2.yaw", loc.getYaw());
}
在第二个示例中,if-else语句会比第一个示例中将六个字符串连接在一起更快吗

我知道这会占用更多的磁盘空间,但它会节省处理能力吗?值得吗


编辑:我执行了一个测试,每个测试有100000000次试验。示例1和示例2分别花费了11.112秒和9.479秒。示例2快了1.633秒。值得吗?如果CPU和磁盘空间很重要,我会使用示例1吗?

更喜欢可读性而不是微优化(事实上,您当前的方法可能比您建议的替代方法更有效,因为分支相对来说比较昂贵,但不要微优化)。我将提取一个方法来构建密钥(同样,最大化可读性)。像

然后你可以像这样调用它

c.set(buildKey(name, team, "world"), loc.getWorld().getName());
c.set(buildKey(name, team, "x"), loc.getX());
c.set(buildKey(name, team, "y"), loc.getY());
c.set(buildKey(name, team, "z"), loc.getZ());
c.set(buildKey(name, team, "pitch"), loc.getPitch());
c.set(buildKey(name, team, "yaw"), loc.getYaw());

与微优化相比,更喜欢可读性(事实上,您当前的方法可能比您提出的替代方法更有效,因为分支相对昂贵,但不要进行微优化)。我将提取一个方法来构建密钥(同样,最大化可读性)。像

然后你可以像这样调用它

c.set(buildKey(name, team, "world"), loc.getWorld().getName());
c.set(buildKey(name, team, "x"), loc.getX());
c.set(buildKey(name, team, "y"), loc.getY());
c.set(buildKey(name, team, "z"), loc.getZ());
c.set(buildKey(name, team, "pitch"), loc.getPitch());
c.set(buildKey(name, team, "yaw"), loc.getYaw());

为什么不在一个循环中尝试每一个,看看哪一个运行得更快呢?
if
语句可能比字符串串联更快,但它不值得。另外,如果优化这段代码真的因为某种原因很重要,那么这并不是你应该做的。您可能会编写某种缓存机制,或者完全避免使用字符串。@DonBranson刚刚做了一个测试,并在编辑中发布了它。@Radiodef您是对的,这将是一个好主意。我的工作没什么大不了的,但我很想知道。如果你想提高效率,你应该使用类创建一个域模型。像您这样处理映射中的非类型化数据有时在脚本语言中是可以接受的,但这会使您的代码难以维护,并且性能更差。在保存/加载数据以及与其他应用程序通信时,您只希望在应用程序的边界处看到此类数据结构,当IO开销通常比这些微小的性能差异高得多时。为什么不在一个循环中尝试每一个,看看哪一个运行得更快呢?
if
语句可能比字符串串联更快,但它不值得。另外,如果优化这段代码真的因为某种原因很重要,那么这并不是你应该做的。您可能会编写某种缓存机制,或者完全避免使用字符串。@DonBranson刚刚做了一个测试,并在编辑中发布了它。@Radiodef您是对的,这将是一个好主意。我的工作没什么大不了的,但我很想知道。如果你想提高效率,你应该使用类创建一个域模型。像您这样处理映射中的非类型化数据有时在脚本语言中是可以接受的,但这会使您的代码难以维护,并且性能更差。在保存/加载数据以及与其他应用程序通信时,您只希望在应用程序的边界处看到这些类型的数据结构,而IO开销通常远高于这些微小的性能差异。