首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin代表游戏开发

Kotlin代表游戏开发
EN

Stack Overflow用户
提问于 2015-06-25 20:09:31
回答 3查看 4.8K关注 0票数 6

背景:

我一直在寻找一种语言来代替Java进行游戏开发。Kotlin提供了良好的IDE支持和Java互操作,看起来很有前途。但是游戏(特别是Android )的FPS杀手之一是GC的使用。因此,一些库(如libgdx)使用对象池、自定义集合和其他技巧来避免频繁的GC运行。对于Java来说,这是可以清楚地完成的。其他一些JVM语言--尤其是功能支持--本质上使用了大量的GC,因此很难避免。

问题:

  1. 与Java相比,Kotlin是否创造了任何不可见的GC开销?
  2. Kotlin的哪些特性更好地避免GC工作的减少?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-02 08:33:01

根据经验,Kotlin生成的字节码尽可能接近Java生成的字节码。因此,例如,如果您使用一个函数作为值,就会创建一个内部类,就像在Java中一样,但不会有更多。还有一些优化技巧,比如IntArrayinline,可以更好地执行。

正如@Peter所说,衡量你的具体情况的价值总是一个更好的主意。

票数 3
EN

Stack Overflow用户

发布于 2020-04-16 18:52:47

您可以为JVM编写Kotlin代码,这将导致与Java相应逻辑相同的分配。在这两种情况下,您都必须仔细检查库调用是否在堆上分配新内存。结合使用Kotlin和LibGDX不会引入任何不可见的GC开销。这是一种有效的方法,并且运行良好(特别是使用ktx扩展)。

但是,有一些Kotlin语言特性可以帮助您以更少的分配来编写代码。

  1. 单身汉是一种语言特征。(对象声明伴生对象 )
  2. 您可以为原语类型创建包装类,这些类型可以编译为原语。但是您可以获得类型安全和富域模型(内联类)的强大功能。
  3. 通过操作者超载内联函数的结合,您可以构建很好的API,这些API无需分配新的对象就可以修改对象。(例子:使用自定义运算符的无分配向量操作)
  4. 如果您使用任何类型的依赖注入机制或对象池来连接您的游戏逻辑和重用对象,那么具体化类型参数可能会帮助您以非常优雅的方式使用它。如果编译器知道实际类型,可以跳过类作为类型参数。

但是还有另一种选择,它确实给了您不同的内存管理行为。感谢Kotlin多平台,您可以将游戏逻辑编写为Kotlin公共模块,并将其交叉编译为本机代码或Javascript。

我在一个游戏项目示例糖果碎屑克隆中这样做。它与科奇一起工作,这是一个为Kotlin开发的现代多平台游戏引擎。游戏运行在JVM上,作为HTML web应用程序,并在Win、Linux、Mac、Android或IOS中作为本机二进制程序运行。

本机编译的代码有自己的更简单的垃圾收集和can 跑得更快。因此,速度增长和不同的内存管理可能会给您的权力储备,以麻烦更少的GC。

总之,我可以为Game推荐Kotlin,也可以推荐GC关键场景。在我的项目中,当我编写Kotlin代码时,我倾向于创建更多的类并分配更多的内存。但这是一个编程风格的问题,而不是一个技术性的问题。

票数 9
EN

Stack Overflow用户

发布于 2015-12-27 05:28:32

从技术上讲,您将Kotlin与Java进行比较的问题是没有意义的,它们将执行相同的操作。但科特林将是一个更好的发展经验。

如果Java适合编写游戏,那么Kotlin只会因为开发人员的生产力而更好。

注意:游戏库LWJGL 3部分使用Kotlin,GitHub统计数据显示67.3%的代码是Kotlin (模板模块看起来大部分是Kotlin)。因此,询问与LWJGL合作的人会给你这个问题最好的答案,因为他们在这方面有很多经验。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31059842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档