一个脑洞: JVM 是否可以把方法区在某种配置或者情况下放到磁盘上以此来减少内存空间

2021-05-13 10:28:31 +08:00
 liudaolunhuibl

1 、操作系统的虚拟内存? 当然操作系统提供了虚拟内存的功能但是这个依赖于操作系统,能不能 JVM 自己来做这个事情。 2 、磁盘 IO 的速度比内存读写慢了很多? 实际上优化一下磁盘 IO 和用 SSD 的吧这两者的差别不会特别大,放在磁盘上就是“时间换空间”,如果你的系统对时间不是特别敏感但是内存特别大的话也许可以考虑? 3 、GC 遍历对象的时候如果有对象在磁盘会增加 GC 的时间和性能消耗? 所以目前考虑的是把不参与 GC 的方法区放上去

2259 次点击
所在节点    Java
14 条回复
GM
2021-05-13 11:06:57 +08:00
先问几个问题:
方法区占用空间多少 M ?
占用的这些内存空间,折算成本值人民币多少钱?
为了省这点空间和金钱,损失巨大的性能提升,值不值?
ch2
2021-05-13 11:07:36 +08:00
你要自己处理缺页异常?
privatetan
2021-05-13 11:07:52 +08:00
可以研读 java 虚拟机规范
ignor
2021-05-13 11:13:01 +08:00
什么样的系统方法区会占内存特别大?
yitingbai
2021-05-13 11:16:53 +08:00
class 能占用多少空间啊!!! 可以说是微乎其微, 占内存的都是数据, 你把数据都缓存到磁盘上, 按需加载不就行了
nightwitch
2021-05-13 11:20:22 +08:00
相当于要在用户态重新实现类似页表的机制。
不具备可行性,因为内核查找页表是有硬件加速的,用软件模拟能慢出天际。
surbomfla
2021-05-13 11:22:54 +08:00
没必要,出了问题谁背锅。真的想要减少内存占用直接换语言
charlie21
2021-05-13 11:25:15 +08:00
向落后进化
liudaolunhuibl
2021-05-13 11:31:53 +08:00
@yitingbai 方法区只有类信息?没有常量??
liudaolunhuibl
2021-05-13 11:32:19 +08:00
@privatetan jvms 上没有相关内容
liudaolunhuibl
2021-05-13 11:33:02 +08:00
@GM meta Space 默认最小是 20M 最大是无限大,一般设定都是 1024,1 个 G
Kiske
2021-05-13 11:50:48 +08:00
Samsung 980 Pro 2TB 连续读取速度 7000MB/s 连续写入速度 5100MB/s
芝奇 Trident Z DDR4 3200MHz 内存读取 30951MB/s 写入 31529MB/s
liudaolunhuibl
2021-05-13 13:33:42 +08:00
@Kiske 10 倍以内对于某些情况下是否是可以接受的?
olaloong
2021-05-13 13:51:25 +08:00
@liudaolunhuibl 醒醒,10 倍是连续读写

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

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

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

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

© 2021 V2EX