Kev*_*din 5 java garbage-collection jvm scala
我在这里有一个JVM内部专家的问题.
在Java虚拟机中,对象内容存储在堆内存中,直到它们是Garbage Collected.通常,当没有更多可用内存时会发生GC,因此如果JVM具有大量可用空间,则可能需要很长时间才能发生GC.
从安全的角度来看,你能想象一种方法可以让某人访问JVM内存并获取堆空间的转储,在那里可以找到等待GC的未使用对象吗?
我的意思是:如果我的程序处理敏感数据,并且我在执行涉及它们的进程后不会引用这些敏感对象的方式对我的应用程序进行编码,恶意软件或系统管理员是否可以访问堆空间并对其进行分析找到这些敏感数据?
Scala的使用是否会在内存管理和垃圾收集方面做出改变?
系统管理员当然可以访问 JVM 内存。作为最后一个资源,他/她可以转储 JVM 进程内存并进行检查。事实上,您必须信任您将在其上执行的平台。
您可以通过使用char[]over String(这是不可变的)并在离开定义它们的范围之前用零覆盖它们来减少此类敏感数据在内存中未加密可用的时间窗口,但会存在一个时间跨度,其中此类数据以明文形式提供。
在较低级别,您可以加密内存,这仍然会在某处留下未加密的密钥。您还可以防止内存页面被交换,这无论如何都不会阻止转储,并且如果您的应用程序使用 RAM 的相关部分并且系统不完全专用于它,则可能会严重影响性能。无论如何,这些解决方案只能保护静态数据,而且据我所知,没有 JVM 来实现它们。
使用 Scala 不会有太大变化,因为这是 JVM 特定的问题,与哪种源语言编译为字节码无关。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |