gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:12 24 4
gpt4 key购买 nike

假设我这样做:

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

其中 VeryLargeObject 是一个 GWT 资源接口(interface),它扩展了 com.google.gwt.i18n.client.Messages

这段代码会在浏览器中创建 1000 个对象的新实例吗?或者 GWT 是否足够聪明,可以检测到 VeryLargeObject 是不可变的,并且每次都重复使用它的 1 个实例?

编辑:我在 docs 中找到了这个但我仍然不清楚这种行为:

Using GWT.create(class) to "instantiate" an interface that extends Messages returns an instance of an automatically generated subclass that is implemented using message templates selected based on locale.

最佳答案

是的,GWT.create() 每次都会返回一个新实例。 但是一个好的生成器会做到这一点,这样就可以在编译代码中对其进行优化。

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

关于java - GWT.create() 是否总是在浏览器内存中创建一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com