java 开发游戏 写游戏 页游 手游 业务

省流:

总结:

1.java走的是业务处理的道路。jvm的机制就是帮助程序员专注于业务逻辑,无需管理内存。

2.java在游戏行业中没有生态。已有的c++服务端用的很好很稳定,没有必要用java重写。并且游戏逻辑可用lua等脚本语言做开发。

3.新团队会用java开发服务器,主要是页游和手游。开发快,追求快速上线,抢占市场。

正文:

Java为什么不用来写游戏?

为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

以下是摘抄的回答: 

Java分三支:JavaSE、JavaME、JavaEE。

以上两个都没落了,主要原因就是因为JavaEE的崛起。服务器端,JavaEE的统治力还是足够强,因为Sun公司的思路在当年也算是正确的抉择,让Java发挥其长处,走业务处理的道路。

作为一门高级语言,Java也许各种底层的东西优化起来很难,但是对于需要处理复杂业务逻辑的程序猿来说,我他喵绞尽脑汁写代码为了实现这个复杂的业务逻辑,你告诉我占用内存太大了?那你来用一天的时间给写一个占用内存小又能实现业务的程序来。(。・_・。)ノI’m sorry~ 对于这类场景,其它的语言还真没几个有Java这么擅长,JVM的机制就是为了让程序员可以专注于业务逻辑,不用去想底层执行。

已注销用户的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎
 

因为在一个生态中一旦落后太久,你语言变的再如何如何,也更难融入这个生态了。

千禧年之后,C#诞生,Xbox诞生,XNA诞生,Unity诞生,Java和主流游戏生态也渐行渐远了。一旦丧失了生态,后续再怎么样都是很难的了。

....该公司的首席程序员直言,Java不再适合作为现代游戏客户端的解决方案,其次最重要的是,Java不适用于性能关键的软件和图形渲染。C++能够完全控制性能和GPU,由此带来更好的视觉效果和性能。

...游戏的第一个可玩版本是用Java创建的,接着,他花了整整12天意识到这不是一个好主意,然后立刻转向了c++。

...Java以后会在游戏生态有所作为么?更加没什么机会了。以后对于游戏编程语言和游戏框架塑造也更加关注于基于关系表的编程和基于约束的函数逻辑编程,因为在游戏编程领域,细粒度的关系太复杂太繁琐了,如果再加上团队合作这个因素,更是以指数增长。在未来,在游戏这个性能为王逻辑关系又纷繁复杂,充斥着矛盾的编程领域,Java也并没有太大的机会了。

树懒卡农的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

ZGC 做到了正常情况平均暂停时间 0.05 毫秒,最大暂停时间 0.5 毫秒,GC 暂停也不再是问题。

现在的问题是,Java 在游戏方面并没有形成完善的生态,更是根本没有能和 Unity 等能够对标的游戏引擎。

Java 在游戏开发上并没有啥出色的亮点:引以为傲的生态无处发挥,在游戏开发上反而缺胳膊短腿,语言特性上只能和 Golang 这种逆时代发展的东西有来有回,性能上也只是不差,比不上投入大量精力优化后的 C++ ,Project Valhalla 17 还落不了地,ByteBuffer 也不是很好使,用 Unsafe 更难写且扭曲……大家没啥理由去用 Java,Java 自然成了不适合开发游戏的语言。

Glavo的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

因为c#跟java是不同的。c#可以控制内存布局,而java不行。游戏还是需要控制内存布局的。

...总而言之,因为内存使用方式的差别,造成java不象c#那样能用来开发游戏。

java不允许操作内存,所以不行。

想理解这个问题,试着用c#封装c++库,和java封装c++库,就明白了。实际移植个实际项目,就知道差别在哪里。

游戏行者2019的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

把JVM作为脚本引擎 其实是挺好的选择

Java或者JVM语言确实不适合做底层

主要原因我觉得主要就三点:

1.缺少自定义值类型

2.因为缺乏自定义值类型 使得GC压力巨大 虽然某些JVM实现会通过逃逸分析等旁门左道解决部分问题 但这也是靠不住的

3.内存布局不透明 不可控

 已注销用户的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

调用GC引起间歇性卡顿。

Enzojz的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

1.GC,2.落后的生态。

java的性能跑跑业务逻辑肯定是够了的。

 温酒的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

1) 主机游戏内存紧缺,需要程序自己决定何时申请、释放内存,而java是由虚拟机管理内存的,何时释放内存这件事情上应用程序做不了主。

2) 游戏的渲染需要大量计算,同时为了保证帧率,对程序性能的要求极高,我见过程序员为了减小一个数据结构的内存、或者在一个字对齐的问题花脑筋的,而java世界里,这些事情又都不是你能控制的。

3) 最后这点是我猜的。cpu传数据给gpu,内存区段的连续性很讲究。而java里一个对象与对象的composition是需要通过new来完成的。因此你更难保证连续的内存区段。

GuoGin的回答:为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

为什么说Java不适合做游戏开发,劣势在哪里? - 知乎

JAVA能写大型游戏么? 

        不能 ,首先游戏现在分为手游、端游、页游、VR游戏和AR游戏,而所谓的大型游戏一般都是指端游(例如:英雄联盟、DOTA2、魔兽世界等)。而端游的服务端开发必须是C++,这没办法C++和java的效率还是有很大差距的。

        java什么东西基本都能开发,只是java致命的是不能直接操作内存,只能安装虚拟机。这样使java在开发的时候造成很多局限性,但是java提供了很多API,可以调用c的类库,使得功能进一步提升,又由于java对于垃圾回收机制是自动的,使得游戏在流畅性上有很大的折扣。所以java不适合开发大型游戏(除非自己实现垃圾回收等一些机制),使java能与c相比,又因为java的初衷就不在界面和桌面游戏上,而在企业开发。因此java不适合开发大型游戏,中小型网络游戏还行。

2017-11-03  https://zhidao.baidu.com/question/1993556271925424507.html

Java对代码进行了大量的封装来达到模块组件可复用的目的,Java更偏向于做服务端方面的工作,做电商网站,公司企业级的后台系统,因为Java语言的特点使其开发的系统具有较高的稳定性和安全性以及最重要的可维护性,如果是C的程序员写的程序,如果他辞职走了,来维护他写的代码的人才是真的痛苦! 

2018-01-12  https://zhidao.baidu.com/question/1644063907381155580.html

在游戏业Java可以搞什么?

        页游和手游的服务端。页游的前端都是Flash或者WEB,手游的前端是coco2dx(C++),unity3D(C#或JS)、虚幻引擎 ,可以看看现在很多公司像腾讯互娱、网易游戏、英雄互娱、边锋网络、巨人网络、37互娱、掌趣科技等等游戏公司他们都在招Java游戏服务端,一般技术要求也不低。

为什么做页游手游的服务端都是用的JAVA而不用C++? 

        现在很多页游手游的服务端都用Java,因为Java的开发效率比C++高,开发周期时间也较短,游戏公司每天在游戏的开发和运营上花费较多的财力,使得游戏公司在上一款产品时都是在抢时间,另外c++的要求门槛高 ,而且经验少的代码质量差,服务器很容易挂掉,还有就是做Java的人也比较好找,写的代码只要不是太烂,一般服务也不会有什么问题。

为什么游戏行业以前用c++做手游服务端比较多,现在很多人用Java做手游服务端? 

        好像在jdk 4.0之前JAVA是没有NIO的,所以那时游戏服务端的天下都是c++/c,后来java出了NIO后,慢慢出现NIO的框架,如 netty、mina等等优秀的框架,慢慢就出现有人用java来做服务端了。 NIO的包,有一些新特性,就是异步非阻塞通讯,大大提高了服务端的性能。 
        Java现在所用的Tomcat,其实是伪异步阻塞式通讯,就是一个线程池在接受发送,一个线程必须等客户端接受完毕才解除     阻塞,底层还是同步阻塞的。
        另外搞C++的人也不愿意转Java,因为需要花费一定的时间和精力,所以现在游戏行业端游的服务端都是c++的天下,而手游和页游的服务端大多数都是java,并且现在拿Java去做页游和手游的服务端也比较轻松,市面上也有很多成功的产品。

假如我是做JAVA的,现在想去做服务端的端游好做吗?

        假如你想搞端游,提醒一下,搞端游的公司门槛很高,而且数量极少,现在剩下的端游公司真心不多了,都是些巨头,如果打算搞端游的话,问一问自己第一个你技术达不达到那种水平? 第二,公司太少了,市场上的岗位也太少,风险大。当然了,如果你觉得你是技术大牛对C++/C语言可以很轻松搞定的话,那可以考虑去做做。

2018-08-30  https://blog.csdn.net/viqecel/article/details/82220099

2018-11-13  https://blog.csdn.net/qq_34820803/article/details/84028215

        所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言。这需要根据自己游戏的类型和要求加以选择。比如C++,Java , Erlang,go等等。目前我用过的只有C++和Java,但是以Java为主。所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系。

   Java目前作为游戏服务器开发语言已经很是普遍。但是大多数是作为页游或手游的服务器,而端游一般选择C++,因为端游对服务器的性能要求相对比较高一些。两种语言各有利弊。C++效率高,但是掌握难,Java更易于学习掌握。而目前对于追求快速上线率的页游和手游来说,Java成了一个不错的选择。

2019-08-22  https://blog.csdn.net/lizhenxiqnmlgb/article/details/100016474

为什么主流游戏大部分都是C++开发出来的?

早年开发游戏必须用C++,这没得说,2000-2004年,java还没有nio,其他动态语言不抗重负,只能C/C++能开发出完整可用的游戏服务端。直到2005年,韩国的游戏很多都还是纯C++写服务端,金山之前也开发过很多纯粹C++的游戏服务端,后来大家都切了。

现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang。我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性能测试程序(机器人)会选择 gevent。那是不是我们就不用C++呢?我们用 C来做网络,不用C++,但是C的比例在所有代码中占比有限。

这是否意味我们可以放弃C/C++了?也不是:C语言是一把锋利的匕首,而现代动态语言是一把长剑。平时匕首可以藏在身上,大部分时候用长剑披荆斩棘就够了,但当你碰到坚硬的石头,长剑不管用了,那么拿出匕首来果断的切碎他。

对于一个成熟领域而言,我的建议是尽量用更高级一点的开发语言,因为游戏开发很多核心技术都有了较为妥当的解决方法。大量的服务端逻辑其实都是在等待,等待网络,等待数据库,这种情况下用C得不偿失。但是服务端有一些地方还是躲不开C/C++,比如当服务器涉及到 3D计算的话(国内很多2D服务端,国外很多3D服务端),大量的矢量矩阵,除了用C++封装出一套好用的数学库外,即便直接用java写,那也是很麻烦的。再比如现在快速动作越来越多,为了让玩家操作更流畅,我需要基于 UDP快速可靠协议,协议开发用 java或者scala,性能上是没办法满足要求的,况且协议实现后要和客户端通信,你没法让所有客户端跟着你一起用java/scala。再比如某些cpu密集的抽象度高的模块,如 aoi或者 ai模块。

对于一个新兴领域而言,C/C++很多情况下是你别无选择的东西。比如移动化浪潮刚起步的时候,还没有啥 cocos或者 unity你真要开发游戏,你必须迅速的使用起 OpenGL ES和 OpenSL,然后再叠加某一脚本,以快制胜,第一批移动浪潮上发财的就是这些游戏。又或者,你可以根本躲开,先不介入,等到几年后cocos和 unity成熟了,你在介入用lua / C#写程序。再比如服务端你如果离开熟悉的游戏和web,去开发一个陌生的领域,如流媒体服务,你会发现这怎么和10年前的游戏一样呀,什么高级工具都不给我用用,这时你可以再等个四五年应该高级工具会出现,异或你想领先别人时,你就果断的拿出 C/C++来解决之,这就是C独有的开拓新领域能力。

大部分答案都是非黑即白,非此即彼。不要只会C不会动态语言,避免成为一个傻逼;也不要只会动态语言不会C,避免离开熟悉的温室就活不下去。对于一个新手而言,如果什么都没学过,我的建议是先用快速开发的东西,把项目弄起来再说,有精力有机会的情况下,也不能完全放弃一些基础的东西,让自己残缺了。

PS:在相同架构下,就纯粹性能而言,各种语言性能差距到底是多少呢?如果只开发回合制这些慢节奏游戏,或者HTTP接口,大部分情况都在等待数据库等待用户消息的话,差别确实不大,的确可能5%都不到。如果cpu密集了,那么可以参考下面的图表,总体来说是10-50倍的性能差别:

有人问,说了半天,这个也不行,那个也不完美,而我时间有限,有没有一个更经济实惠的方法呀?如何才一次性达到彼岸呀?时间有限项目吃紧有没有更好的选择?我说有啊!那就是 java。

这样,我列出一般开发游戏使用的语言。

2D页游:AS3 JS

3D页游:AS3 C#(Unity)

IOS游戏:Obj-C js/lua(Cocos-2d-x) js/C#(Unity) AS3

安卓游戏:java js/lua(Cocos-2d-x) js/C#(Unity) AS3

在线小游戏:AS3 JS

大型单机游戏/客户端MMORPG::C++ C#

2021-09-02  https://zhuanlan.zhihu.com/p/406101922

为什么游戏服务器还是用cpp而不是java? - 知乎

摘抄的一些回答:

1.开发简单,最快招聘一个应届生2周就可以开始写业务了。(学java的人太多了,现在我司招聘的门槛也比以前高了很多)

2.java的instrument 相关热更新技术足以应付线上的一些紧急的bug。

3.jvm已经非常成熟,性能不是问题,通讯量最大的mmo国战产品,腾讯云vm12服务8k的玩家的性能优化我们也做过,但再继续往下做收益不大(机器成本,相对于其它成本已经微乎其微了),aoi是数学问题,c加加和java属于同一个数量级的语言,同样的算法一个有问题拿另一个语音跑差异不大。fullgc不应该出现可以优化到一周都不发生一次。

4.社区繁荣,各种成熟的框架 和 调试监控等等工具链很多。

5.程序员不是打字员,不是打字越快,代码越精简效率就更高。对于复杂的大型(上百万行代码以上)项目来说,开发效率的提升依靠的是工作流和合理的模块化设计。所以比较cpp与java甚至其它语音之间的开发效率意义不大。

匿名的回答:为什么游戏服务器还是用cpp而不是java? - 知乎

1.很多公司的C++服务器久经考验,既稳定又高效,为什么要用Java重写呢?

2.很多公司的C++服务器的游戏逻辑是用Lua之类的脚本语言写的,既简洁又好用,为什么要用Java重写呢?

3.很多新团队用Java写服务器,尤其是一些页游和手游团队;

4.还有团队用C#、Python和Go之类的语言写服务器。

世界树的影子的回答:为什么游戏服务器还是用cpp而不是java? - 知乎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

globalcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值