繁体   English   中英

GWT.create()总是在浏览器内存中创建一个新对象吗?

[英]Does GWT.create() always create a new object in browser memory?

假设我这样做:

VeryLargeObject o1 = GWT.create(VeryLargeObject.class();
VeryLargeObject o2 = GWT.create(VeryLargeObject.class();
...
VeryLargeObject o1000 = GWT.create(VeryLargeObject.class();

其中VeryLargeObject是一个GWT资源接口, extends com.google.gwt.i18n.client.Messages

此代码是否会在浏览器中创建1000个新对象实例? 或者GWT是否足够智能来检测VeryLargeObject是不可变的并且每次都重复使用它的1个实例?

编辑:我在文档中发现了这个,但我的行为仍然不明确:

使用GWT.create(class)“实例化”扩展Messages的接口返回自动生成的子类的实例,该子类使用基于locale选择的消息模板实现。

是的, GWT.create()每次都会返回一个新实例。 但是一个好的生成器会使它在编译代码中被优化掉。

GWT编译器所做的第一件事就是收紧类型(重写代码以使用最具体的类;在这种情况下,消息接口的所有用法都将替换为生成的实现)然后使方法静态(除了当需要动态调度时,即实际使用多态性)。
对于I18N Messages接口,因为生成的类没有状态且其构造函数没有副作用,这意味着可以优化实例,并且只有静态方法保存在代码中(当它们不在以后内联时)。
更复杂的情况(例如客户端捆绑包,CSS资源)实际上将使用“静态状态”,因此实例本身可以再次优化,最后如果您创建了1000个实例或仅共享一个实例,则无关紧要。

根据GWT Javadoc,create()方法将返回一个新实例,所以我怀疑它是同一个对象

http://www.gwtproject.org/javadoc/latest/com/google/gwt/core/client/GWT.html#create(java.lang.Class)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM