jruby包含java类性能vs包含一个包

时间:2010-01-14 16:40:02

标签: module jruby jrubyonrails

我有一个jruby rails应用程序,在lib中有一个ruby模块,它是我的java对象的名称空间,所以我没有冲突。

我想知道在该模块中包含特定类和包含包之间的区别。我在下面列出了示例代码。

在控制台中,对于示例1 ,当我说MyMod ::并点击标签时,它有(例如)101个方法和类选项,MyMod :: MyClass就是其中之一。

对于示例2 ,当我点击MyMod :: and tab时,它只有100个方法/类选项,并且它不包含MyClass。如果我然后去引用MyMod :: MyClass,那么再次运行MyMod :: tab,我现在有101个选项并且列出了MyClass。

这是我的问题。在我的模块àla示例1 中直接引用这些类与在示例2 之后按需加载它们之间的区别是什么。如果我有一个包含大约20个类的包,我是否优先按需或预先加载它们,并且按需加载它是否有任何开销,例如示例2

示例代码:

示例1

module MyMod
  MyClass = Java::my.package.MyClass
  ....
end

VS 示例2

module MyMod
  include_package "my.package"
end

2 个答案:

答案 0 :(得分:1)

如果你真的打算上课,那么在某些时候会花费你一些钱。无论是专门加载还是按需加载都无关紧要。我想对于你的两个例子,如果你使用MyClass,那么没有区别。另一方面,如果从未使用过MyClass,那么示例1显然是在浪费一些东西。

此外,include_package并没有真正提取整个包,但有点像在需要类时建立搜索范围。通常不建议使用include_package。有关问题,请参阅JRUBY-2376

答案 1 :(得分:0)

我的结果略有不同。也许你正在使用不同的自动完成程序?

irb(main):001:0> module MyMod;MyClass = Java::JavaUtil::Date;end
=> Java::JavaUtil::Date
irb(main):002:0> module OtherMod;include_package "Java.Util";end
=> nil
irb(main):003:0> MyMod.methods.size
=> 109
irb(main):004:0> OtherMod.methods.size
=> 109
irb(main):005:0> require 'irb/completion'
=> true
irb(main):006:0> MyMod::
Display all 110 possibilities? (y or n)
irb(main):006:0> OtherMod::
Display all 109 possibilities? (y or n)
irb(main):006:0> OtherMod::
irb(main):007:0*

关于你的问题,我不确定。但是,如果我不得不猜测,dd说,因为红宝石是动态的,所以这两种方法都没有预先加载任何东西。