Shi*_*gon 19 java memory garbage-collection jvm memory-management
在思考了一个通用的方法来提出这个问题(并且没有找到一个)后,我只想问它是一个具体的例子:
假设我有一台具有1 Gb内存的Linux机器,它可以分配给进程(物理和交换总数为1 Gb).
我在计算机上安装了标准的Oracle Hotspot JVM版本7.如果在给定时刻,有足够的程序运行,只有400 Mb的1 Gb是空闲的,并且我在那时使用以下JVM标志启动Java程序:
java -Xms256m -Xmx512m -jar myJar.jar
Run Code Online (Sandbox Code Playgroud)
发生了什么?:
A. JVM是否无法立即启动,因为它会尝试分配所有512 Mb内存并失败(由于目前没有足够的可用内存)?
如果JVM启动:
如果在某些时候正在运行的Java进程需要超过400 Mb的内存(并且除了当前的Java进程已经使用的内存之外,仍然只有400 Mb的内存可用),会发生什么:
B. Java进程是否会因OutOfMemroyError而失败?
C.它会因某些其他(标准)错误而失败吗?
D.是不确定的行为?
假设我有一台具有1 Gb内存的Linux机器,它可以分配给进程(物理和交换总数为1 Gb).
我的第一反应是,除非你在谈论手机,否则我会得到更多的记忆.您可以以低于100美元的价格购买16 GB(b =位,B =字节).
JVM是否无法立即启动,因为它将尝试分配所有512 Mb的内存并失败(由于目前没有足够的可用内存)?
如果您的系统没有512 MB(加上一些开销),因为它在启动时分配用于堆的连续虚拟内存,则会发生这种情况.
即使你有550 MB空闲,程序也可能无法启动,因为它需要加载的不仅仅是堆.
Java进程是否会因OutOfMemoryError而失败?
如果您的程序在运行时使用512 MB,则无论您的计算机具有多少内存,都会发生这种情况.只有在JVM启动后才会出现此错误.如果无法启动,您将不会收到此错误.
它会因一些其他(标准)错误而失败吗?
如果在程序启动后耗尽交换空间,则可以执行此操作.这是罕见的,只发生在严重超载的机器上.我所看到的是由于低级操作系统无法分配内存而导致JVM崩溃.
归档时间: |
|
查看次数: |
27122 次 |
最近记录: |