background image

这个可以被认为是强制垃圾回收的一种机制,但是并非强制回收,只是向 JVM 建议可以
进行垃圾回收,而且垃圾回收的地方和多少是不能像 C 语言一样控制,这是 JVM 垃圾回
收机去控制的。程序中尽量不要是去使用这些东西,除自己开发一些管理代码除外,一般
由 JVM 自己管理即可。
这里顺便提及几个查看当前 JVM 内存的几个简单代码方法(在 JVM 监控下有很多的工具,
而且不同的厂商也有自己不同的工具,不过后续大部分关于 java 的文章都是只提及到:
Hotspot VM 的版本,其他的版本可能只是略微说明下):

2.1.设置的最大内存:-Xmx 等值:

(Runtime.getRuntime().maxMemory()/ (1024 * 1024)) + "MB"

2.2.当前 JVM 可使用的内存,这个值初始化和-Xms 等值,若加载东西超过这个值 ,

那么以下值会跟着变大,不过上限为-Xmx,由于变动过程中需要将虚拟内存做不

断的伸缩过程,所以我们推荐服务器:是-Xms 等价于-Xmx 的值:

(Runtime.getRuntime().totalMemory()/ (1024 * 1024)) + "MB"

2.3.剩余内存,在当前可使用内存基础上,剩余内存等价于其剪掉使用了的内存
容量:
(Runtime.getRuntime().freeMemory()/ (1024 * 1024)) + "MB"
 
同理如果要查看使用了多少内存或者百分比。可以通过上述几个参数进行运算查看到。。。。
顺便在这里提供几个实用方法和类,这部分可能和 JVM 回收关系不大,不过只是相关推
敲,扩展知识面,而且也较为实用的东西:
2.4.获取 JAVA 中的所有系统级属性值(包含虚拟机版本、操作系统、字符集等等信
息):
 System.setProperty("AAA", "123445");
 Properties properties = System.getProperties();
  Enumeration<Object> e = properties.keys();
  while (e.hasMoreElements()) {
   String key = (String) e.nextElement();
   System.out.println(key + " = " + properties.getProperty(key));
 }
 
2.5.获取系统中所有的环境变量信息:
Map<String, String> env = System.getenv();
  for (Iterator<String> iterator = env.keySet().iterator(); iterator
    .hasNext();) {
   String key = iterator.next();
   System.out.println(key + " = " + env.get(key));
}
System.out.println(System.getenv("CLASSPATH"));