为什么 Java 要码农操心 JVM 性能调优?

2020-12-15 14:48:38 +08:00
 enihcam
.Net Core 团队官方表示 CLR 任何时候都是最优性能状态。而 Java 需要经常人肉调优 JVM,居然还做成了面试题。

为何 Java 码农在折腾 JVM 上乐此不彼?
这是什么癖好?
8923 次点击
所在节点    Java
92 条回复
Jooooooooo
2020-12-15 14:49:35 +08:00
.net 不用设置内存大小吗
Jooooooooo
2020-12-15 14:51:05 +08:00
假设有一天

你写了个很挫的代码, 不小心内存使用扩大了十倍

让你找下原因

这就是 jvm 的题目

所以 .net 没有这种问题是吗? 真的吗, 我不信.jpg
enihcam
2020-12-15 14:51:28 +08:00
@Jooooooooo 十几年.net 经验过来人表示从来不通过 CLR 限制.net 内存。要么通过 k8s 模板,要么 cgroup 。
Jooooooooo
2020-12-15 14:52:31 +08:00
我搜了一下, .net 也是有 GC 和 stw 的

那么有一天, 你发现线上的 stw 时间翻了一倍, 让你找下原因

这就是调优

还是你说 .net 不会有这种问题
Jooooooooo
2020-12-15 14:53:21 +08:00
@enihcam 所以你申请一个机器假设 16G, 要用到都开始 swap 了才能发现有问题?
enihcam
2020-12-15 14:53:52 +08:00
@Jooooooooo .net 有 profiler 啊,visual studio 自带的就异常强大。这么说 java 找内存泄漏是件很困难的事情。
MinQ
2020-12-15 14:54:09 +08:00
@Jooooooooo dot net 可以使用系统中所有可用内存
Jooooooooo
2020-12-15 14:55:14 +08:00
@enihcam 你说的那个 profiler 就是调优. 为啥看不起别人同样的东西呢?
enihcam
2020-12-15 14:55:34 +08:00
@Jooooooooo 怎么可能 swap,内存达到一定级别,容器检测就把你干掉了。
enihcam
2020-12-15 14:56:26 +08:00
@Jooooooooo profiler 调的是业务代码吧我理解,我质疑的是 JVM 参数调优。
Jooooooooo
2020-12-15 14:56:49 +08:00
@MinQ 那 java 也可以, 启动的时候拿到机器内存大小直接设置成堆大小就可以了.

但没人会这么用. 操作系统也要占内存的啊.
Jooooooooo
2020-12-15 14:57:18 +08:00
@enihcam 是啊. 这些问题都是通用的, 为啥在 java 上调整就要遭人鄙视呢?
MinQ
2020-12-15 14:57:36 +08:00
@Jooooooooo profiler 不是调优,是类似 Memory Analyzer Tool 一样的工具,用来实时监控程序里面各个对象的资源占用的
Jooooooooo
2020-12-15 14:58:06 +08:00
@enihcam 我怀疑你并没有做过 JVM 参数的调优. 对这个东西有不太正确的看法.

你以为是在调什么, 写 JVM 的代码吗?
Jooooooooo
2020-12-15 14:58:45 +08:00
@MinQ 对啊. 用 MAT 也是 jvm 调优的一项. 你也说了是类似的, 那这个问题在于?
enihcam
2020-12-15 14:59:53 +08:00
enihcam
2020-12-15 15:02:26 +08:00
@Jooooooooo 文中提到 JAVA_OPTS="$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/aaa/dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/aaa/dump/heap_trace.txt -XX:NewSize=1G -XX:MaxNewSize=1G"

这是什么奇怪的东西?是 JVM 调优吗?
hello2060
2020-12-15 15:02:29 +08:00
@Jooooooooo 这不算调优吧?就像 C++程序写的有内存泄漏一样,那叫修 BUG 也不叫性能调优啊
Jooooooooo
2020-12-15 15:04:40 +08:00
@enihcam 这就是设置内存大小, GC 算法, 打印日志开关, dump 文件放哪.
Jooooooooo
2020-12-15 15:05:13 +08:00
@hello2060 那 jvm 调优就是干这些事情. 所以我说你们对 jvm 调优有不切实际的认知.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX