在JVM实例内部是否可以访问JVM的JMX服务器?还是必须通过标准的套接字/端口远程接口进行连接?
+----------------------------------------+ Option 2: Connect
| +---------------------------+ | through sockets like
| | My Notification Listener |+----->----------+ a remote
| | | | | monitor.
| +---------------------------+ | |
| + | |
| Option 1: connect| | |
| to the internal | | |
| JMX server. I'm | | |
| trying to find | | |
| if this is possible. | |
| | | |
| | | |
| A single JVM instance. | | |
| | | |
| +------------+-----v------+--+ | |
| | | GuageMXBean|<-+<--------------+
| | +------------+ | |
| | JMX MXBean Server | |
| +----------------------------+ |
+----------------------------------------+
背景:我正在尝试实现一个“智能”系统,它可以响应JVM状态,特别是内存使用情况,可以在缓存工作数据和将其保存在RAM中之间进行切换。设置JMX监听器似乎比运行后台线程更加优雅,做类似以下事情的操作:
Runtime RTime = Runtime.getRuntime();
while(!shutdown)
{
if((RTime.totalMemory / RTime.maxMemory) > upperThreshold) cachmode = CACHETODISK;
if((RTime.totalMemory / RTime.maxMemory) < lowerThreshold) cachmode = CACHETORAM;
Sleep(1000);
}
桌面应用程序,如果有区别的话。
这是我第一次在SO上发帖,所以欢迎任何改进问题等方面的提示。