有个疑问为啥别的语言也是有垃圾回收但是没java讨论的多

encijietuo   (pmwx)2019-06-12 14:19:29
rt,go python js也都有各自的垃圾回收机制,但是他们的开发者好像对这方面的讨论比较少,java程序员就是各种jvm gc算法 参数和调优,这是什么原因呢,其他语言也接触但是不深入 求指教
oldwatch   (一条叫java的鱼◎城内风光独好)2019-06-12 14:27:53
其实java现在真正值得讨论的gc问题也就是大内存(至少8G起板)下full GC导致 Stop World
然后CMS和G1表现已经相当可以了
go的gc算法这方面印象中表现不错,ms级STW
Dot.net的GC只有三个预设场景可选没有底层配置项所以无脑就对了
另外几个和这个应用场景就没毛线关系
【 在 encijietuo (pmwx) 的大作中提到: 】
: rt,go python js也都有各自的垃圾回收机制,但是他们的开发者好像对这方面的讨论比较少,java程序员就是各种jvm gc算法 参数和调优,这是什么原因呢,其他语言也接触但是不深入 求指教
potator   (二篇儿半)2019-06-12 14:28:19
1. java用的多,讨论自然就多。
2. java的gc做的确实也是烂,不然咋会这几年整出好几个垃圾回收器,马上又要出一个新的了,名字挺绕口没记住……
oldwatch   (一条叫java的鱼◎城内风光独好)2019-06-12 14:29:00
来,说一下
哪个GC管理器烂在何处?
【 在 potator (二篇儿半) 的大作中提到: 】
: 1. java用的多,讨论自然就多。
guestking   (无)2019-06-12 14:45:30
js这种跑在客户端的东西,也不会7*24小时开着,要崩也就崩自己
所以就显得没那么重要
其实如果只是做个没多少人访问的系统
java的内存回收也不需要太过关注
只要你别一直io打开不关就行了
【 在 encijietuo (pmwx) 的大作中提到: 】
: rt,go python js也都有各自的垃圾回收机制,但是他们的开发者好像对这方面的讨论比较少,java程序员就是各种jvm gc算法 参数和调优,这是什么原因呢,其他语言也接触但是不深入 求指教
encijietuo   (pmwx)2019-06-12 15:00:02
可以理解为java开放给开发者这方面可配置的地方多(各种jvm的启动参数,各种垃圾回收器的选择),其他语言在这方面没留给开发者可配置的地方,可以这样理解?
【 在 oldwatch 的大作中提到: 】
: 其实java现在真正值得讨论的gc问题也就是大内存(至少8G起板)下full GC导致 Stop World
encijietuo   (pmwx)2019-06-12 15:00:59
我指的nodejs,web前端确实没啥好在意内存使用的。
【 在 guestking 的大作中提到: 】
: js这种跑在客户端的东西,也不会7*24小时开着,要崩也就崩自己
encijietuo   (pmwx)2019-06-12 15:01:37
zgc?
【 在 potator 的大作中提到: 】
: 1. java用的多,讨论自然就多。
oldwatch   (一条叫java的鱼◎城内风光独好)2019-06-12 15:08:12
应用场景最相似的就是dot.net
不过ms没开放底层配置项所以没得讨论
其他几个语言
python? 几百ms的STW体现的出来么?体现出来有人在乎么?
nodejs? 本来就是全异步的
【 在 encijietuo (pmwx) 的大作中提到: 】
: 可以理解为java开放给开发者这方面可配置的地方多(各种jvm的启动参数,各种垃圾回收器的选择),其他语言在这方面没留给开发者可配置的地方,可以这样理解?
RAV4   (hehe)2019-06-12 15:35:37
也就java的gc会把系统搞出故障一样的效果
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 其实java现在真正值得讨论的gc问题也就是大内存(至少8G起板)下full GC导致 Stop World
potator   (二篇儿半)2019-06-12 15:58:44
不是,zgc的下一代,好像发音是“三那多rua”之类的
现在网上的资料非常少,我也没搜到正确的名字。
【 在 encijietuo 的大作中提到: 】
: zgc?
potator   (二篇儿半)2019-06-12 16:04:09
JavaGC最大的问题是它的不确定性和不可控性。
虽然总体原则是了解的,
但是你的应用程序无法预测它什么时候会GC
并且你也没法控制它什么时候GC。
但一旦GC,就Stop the world,在高性能场景下是致命的问题。
【 在 oldwatch 的大作中提到: 】
: 来,说一下
guestking   (无)2019-06-12 16:05:06
别的语言的gc是怎么做到在不stop the world的情况下gc的?
java是有什么理由没法学吗?
【 在 potator (二篇儿半) 的大作中提到: 】
: JavaGC最大的问题是它的不确定性和不可控性。
potator   (二篇儿半)2019-06-12 16:06:22
应该是这个:
Shenandoah:Your Next Garbage Collector
【 在 potator 的大作中提到: 】
: 不是,zgc的下一代,好像发音是“三那多rua”之类的
potator   (二篇儿半)2019-06-12 16:10:58
有些语言会提供destory之类的方式,允许应用程序销毁对象释放内存。
这样,至少能做到“你要觉得我管不好你的内存,你可以自己管”。
【 在 guestking 的大作中提到: 】
: 别的语言的gc是怎么做到在不stop the world的情况下gc的?
guestking   (无)2019-06-12 16:16:52
自己管的话,还是有点费劲的
【 在 potator (二篇儿半) 的大作中提到: 】
: 有些语言会提供destory之类的方式,允许应用程序销毁对象释放内存。
oldwatch   (一条叫java的鱼◎城内风光独好)2019-06-12 17:24:00
因为FullGC触发是应用程序自己都无法控制的事情
G1的MaxGCPauseMillis超参已经相当接近于面向最终结果的智能调控了
凡自动内存管理没有不STW的
应用场景能不能接受的区别,要想爽自己飞指针去
【 在 potator (二篇儿半) 的大作中提到: 】
: JavaGC最大的问题是它的不确定性和不可控性。
hgoldfish   (老鱼)2019-06-12 17:28:01
python 的 gc 是半残废,主要是靠引用计数。我经常搞出循环引用。但 python 底层是 c/cpp,大规模的内存都交由 c/cpp 去管理,不像 java 那样碰到大内存就出各种幺蛾子。
js 的 gc 跟异步没关系。它的应用场景我看压根不需要内存管理。等 tab 页被关掉的时候直接释放虚拟机内存就行了。
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 应用场景最相似的就是dot.net
hgoldfish   (老鱼)2019-06-12 17:29:19
新的 gc 不是没有 stop the world 的问题了吗?
有谁普及一下这个新的 gc 吗?有什么坑?
【 在 potator (二篇儿半) 的大作中提到: 】
: JavaGC最大的问题是它的不确定性和不可控性。
potator   (二篇儿半)2019-06-12 17:29:56
像Flink这些就是这么做的,自己管理内存,但是效果并不好。
【 在 oldwatch 的大作中提到: 】
: 因为FullGC触发是应用程序自己都无法控制的事情

水木社区