java为什么不能写大型游戏

作者: 黑马Java阿玮分类: 计算机技术 发布时间: 2023-01-17 17:59:35 浏览:345899 次

java为什么不能写大型游戏

轻云_LightCloud:
家里电脑上年纪了 但是很多优秀的独立游戏都能流畅玩 唯二的能跑但是超级卡的游戏就两个,MC(Java)和僵毁 好巧不巧 这俩还全都是java写的 事实证明 java就是不适合写游戏 不要再刷什么mc了

【回复】僵毁在改了,毕竟是2D转2.5D游戏,至于麦块,优化烂的不止一点[doge]
【回复】所以,大型游戏根本就不可能用JAVA写,我玩过的JAVA游戏基本都是一点点大,但是他占用的内存可能会比我100GB,200GB的游戏还要能占内存。
【回复】能写和适合写,是两回事,不过有一说一,依托java强大的跨平台实力,java版mc才能在手机上运行(你电脑性能真差)
管脚:
那些刷mc的,Java版的优化的确没有基岩版好

【回复】java是最初那帮创始人写的,基岩是微软收购后有组织的去编写的,这就是区别
【回复】回复 @飞狐 :那是因为java存在很久了,形成了生态
【回复】回复 @飞狐 :这是社区的原因。无法改变Java版优化就是没基岩版好
捣蛋鬼别杠精:
Minecraft固然是一个Java写的游戏,但是实现3D图形加速的库是C/C++写的[doge]

【回复】java相当于只是作为一个cpu端的调用者,通过os的系统调用来引用gpu的绘制api,和c++没有必然联系的
【回复】而且优化一言难尽,全靠社区优化mod作者贡献
【回复】回复 @历史要掩埋了我 :Linux没有C++代码,因为Linus本人不喜欢C++,所以社区没办法不能给Linux写C++。windows是多语言混合的,汇编、C和C++都有用
熠初shine:
不要刷mc,说句实话要是用c++写一个mc那么会更流畅

【回复】你要找的是不是:Bedrock Edition
【回复】回复 @枝江制糖厂 :基岩版纯粹就是开发态度问题,我严重怀疑基岩版就是外包给印度开发的[思考]
【回复】c++写的minetest还行,除了手感差之外都还好,基岩版MC就别提了,一堆严重bug放着不修
XWICE:
在点进来之前,我就知到有人会刷什么了[脱单doge]

【回复】当某个作者的评论区被疯狂地刷同一个作品时,就证明这个作者的作品有点太少了
账号已注销:
刷mc可还行,mc可不是大型游戏,没见过那个大型游戏才几G。虽然Java执行效率很可观,但是对资源的消耗也是很客观的,用Java写游戏内存怕不是要爆炸。何况200多mb的jar都能让我服务器内存吃满ssh都差点寄了(最低限的服务器)

【回复】MC单核杀手的名号不是白来的[辣眼睛]
【回复】回复 @CalculusWJF :一核有难,N核围观
【回复】回复 @楊紘_Rat : 大型游戏,分为大型网游和大型单机游戏,属于一种高端级别的游戏,与小型游戏相对,广义来讲指的就是一些占硬盘空间大、配置要求高、多平台发售、游戏美工优秀(包括人物美工与环境美工)、大投资、大制作的游戏。大型游戏一般都具有以下特点:(1)所占容量大(如微软模拟飞行)(2)配置要求高(如使命召唤现代战争)(3)玩家数量众多(如魔兽世界)(4)跨平台发售(5)大公司、大投资、大制作(如育碧和卡普空等大型游戏公司)。 ------百科
shan_luan_:
不是不能写,只是不适合,因为有更好的选择

【回复】回复 @维基丸 : unity使用C#是用作脚本引擎。引擎核心依然是C++
【回复】是这样的,现成的unity用的是c#,和java也差不多
【回复】没错,java的强项就不在游戏上。
KYZ___:
Java确实面向企业开发,Jvav才是给大型游戏用的[doge]

【回复】回复 @陈牛码 :Jvav大师张浩扬什么时候开课[doge]
zxcsa44:
但理论上来讲你甚至可以用py这种性能拉胯得不行的语言写大型gal。应该说高性能游戏适合用c or c++写,或者愿意的话还可以嵌入汇编优化。mc的光影之类的是显卡处理的,真要说的话和java本身没太大关系,倒是区区几千个实体就能把电脑卡死,确实可能和java有关。。

【回复】最主要minecraft吃单核性能,这就很不友好了,一核有难,八核围观
【回复】回复 @GHMK_Offical :renpy就是用py做galgame的引擎,实际运行起来还行。
EBwilson:
java不适合编写游戏这个事其实深层原因还是jvm的逻辑,因为现在使用最广泛的jvm莫过于hotspot,依赖jit的优化机制带来额外的开销,额外的大量代码也使得启动jvm的开销更大,再加上本就绕不开的vm指令转译,效率可以在一众语言中倒数,但事实上java慢也只在hotspot上慢,甲骨文延续了java的旧优化思路,最后将java及一众jvm语言都打上了高开发效率低运行效率的标签,但事实上IBM开发的open j9 vm在很大程度上已经解决了java运行占用大的问题,但j9的思路是aot,事实上也只是在将java往更靠近机器指令的底层去靠,很显然,c系语言直接编译的机器代码本就比字节码少一层转译,再有就是IBM的策略,j9的使用终究是少数(且缺少sun包等工具包),所以java高开发低效能的局面大概直到java退出主流语言甚至退居小众语言后都很难改变

【回复】虽然我是职业java程序员,但我觉得搞VM就是吃饱了撑的。本来执行个add操作,cpu一条指令搞定,结果jvm非要自己实现指令集和指令引擎、本地变量表、操作数栈、对象堆模型(还要支持GC和并发)。先要把变量从本地变量表取出来压入操作数栈、然后执行引擎执行到iadd、fadd、... xadd指令(不同变量类型不同加法指令),对应的翻译成以下操作:(1)从操作数栈取两个操作数,(2)让cpu执行对应的加法指令 ,这里面还有字节宽度、编码字节顺序、数据类型等问题 (3)将返回值压入操作数栈。这一方下来,好比你要去马路对面吃饭,10秒足以,结果非要开车去,拿钥匙->下电梯进车库->启动车俩->出库->出小区大门->出门右行->掉头->停车->到饭店,10分钟都搞不定。更有意思的是,OS已经屏蔽了CPU和其他物理层的差异,JVM再来个屏蔽OS差异。结果经过20年发展,企业统一都用linux服务器,跨平台的优势在哪儿?至于开发效率,C++慢的是没有生态,很多东西都得自己写。如果有足够lib和框架加在汇编上,汇编都能起飞。
【回复】“目前业界除了在JVM中进行AOT的方案,还有另外一种实现Java AOT的思路,那就是直接摒弃JVM,和C/C++一样通过编译器直接将代码编译成机器代码,然后运行。这无疑是一种直接颠覆Java语言设计的思路,那就是GraalVM Native Image。它通过C语言实现了一个超微缩的运行时组件 —— Substrate VM,基本实现了JVM的各种特性,但足够轻量、可以被轻松内嵌,这就让Java语言和工程摆脱JVM的限制,能够真正意义上实现和C/C++一样的AOT编译。这一方案在经过长时间的优化和积累后,已经拥有非常不错的效果,基本上成为Oracle官方首推的Java AOT解决方案。”
【回复】回复 @迷湾 :都说是职业的了难道不知道为啥java要跨平台?
账号已注销:
Java版MC优化差还真不能全怪Java,因为他们一开始只是一个小作坊没想到这游戏会火,而且快速迭代和追求实现功能肯定会让代码变成屎山,以至于优化全靠mod。 有点当年玩绝地求生的感觉,优化也是真的差。

【回复】.一半功劳13代码一半功劳java
【回复】回复 @MKJDGJE :cpu占用率跑不上去也贵java吗?80%以上归mojang
庄琦:
给大家介绍一下java的游戏引擎,Libgdx,它的跨平台实力非常强,甚至可以把游戏打包成网页,物理、ai什么的在底层封装了c,性能很高

【回复】回复 @黑嫖233 :arc就是libgdx套壳重命名,类似Harmony与Android的关系
【回复】回复 @MazeNo9 :LWJGL的第一个L就足够把它开除这个视频的讨论范围了(笑)
沅虹之月:
游戏需要高性能,JAVA在这方面官方支持不是很好,尤其是缺少值类型,让JAVA写游戏变得很吃力不讨好。 总体来说就是可以做,但没必要。

【回复】回复 @绿猫GreenCat :栈上分配内存,速度快且无gc
【回复】回复 @打小不爱吃鱼 :运行效率怕是反过来都不止[大笑]
【回复】回复 @打小不爱吃鱼 :python写一行,java写6行。python写一千行,java写多少行?可能不到一千行也说不定。
智能识字木马:
java版mc的源代码就是依托答辩,自学个十几天的java跑去做mod开发读源码的时候就能发现大量答辩

【回复】Java如果不去管那些spring框架,3天足够从c++或者go或者Python入门了。第一天上午俩小时速通基础类型。再俩小时熟悉一下Java的oo特性,下午一下午反射。第二天上午学实用数据结构concurrenthashmap那些,下午学修饰符,第三天就能开始spring了
【回复】回复 @lspSurelyPursue :6,三天速通,指的学72小时的话,你说的没问题
【回复】当累积到一定数量后,所有项目的代码答辩都很多
改名称要六硬币:
minecraft java版优化确实差,但是minecraft是看CPU单核性能的,一核有难,八核围观说的就是minecraft,说卡的其实是你们的CPU单核性能不行

【回复】本来这玩意儿就有问题 r5 2600+580在三百天的70模组整合包的科技中心里只有60帧上下 换成12490f+6800xt后不到100帧,显卡占用率不到20% 后来装了一个台湾友人萝莉王的优化mod,可以跑到大概300帧
【回复】回复 @喀秋莎站在高高的岸上 : 高版本不加优化mod是要出事的啊[笑哭]
【回复】回复 @minecraft315 :不然呢?难道用jvav?
残雪ちゃん:
刷mc的建议用老电脑同时跑一下java和基岩,就知道流畅度相差多少了,我是四代i5,核显,d3 8g内存,同样的1.19,Java的10帧,基岩60帧。差距巨大[藏狐][保佑]

【回复】三代i53470,同是核显有12gddr3内存,1.19有20帧,加高清修复30帧往上40帧往下,加钠麟星光等等优化mod60帧,复杂场景30帧,mc纯纯的优化问题和语言关系不大
【回复】回复 @minecraft315 : 我不理解你这样回复的目的是什么,我想表达的观点跟mc关系不大,只是想说明java并不适合编写大型游戏,只是借mc的Java版和Windows版作为一个例子来说明,编写游戏的语言相比java而言C++会有更高的流畅性
【回复】我也是i5+核显,为什么我1.19.3 能稳定230帧以上(雾 [微笑]
Nature是3着:
java就凭一个它不能操作内存就注定不是用来做游戏的,你想想我的世界,动不动就是8g16g消耗,还TM内存溢出报错。

【回复】内存溢出真的脑血栓,因为一启动就是直接划定了一个内存范围
馃惗:
那些刷mc的,这不正是说明了为什么java版优化这么烂吗

【回复】主要原因当时Notch是闲着没事随手挑的Java顺手写的游戏也没想到会火
【回复】MC烂是主要是因为MOJANG的原因,从打几个优化mod就能提高几倍TPS和几十倍FPS就能看出。基岩版用C++写的也一样的烂
【回复】回复 @Alpha_False : 你想多了,纯粹是这货水平太差
FT今天吃什么:
弹幕真的难绷 刷mc的是不是连正版账号也没有 但凡玩过都知道mcje的优化是什么答辩 另外一个版本就占几百兆的游戏也能叫大型游戏?

【回复】回复 @不尴尬呵呵呵 :几个g也算不上大型游戏 而且你判定一个游戏是不是大型游戏不应该看游戏本体么
【回复】错啦,云玩家嘛 错啦,不是小游戏的肯定就是大型游戏嘛
【回复】回复 @不尴尬呵呵呵 :游戏本身不是大型游戏,材质包再怎么体积大也只是材质包体积大,mc就不是大型游戏

IT 计算机 编程入门 编程 java 零基础学编程

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!