是否有办法以编程方式跟踪Java EE应用服务器上特定会话的大小,或者我是否必须使用应用服务器的供应商特定工具来执行此操作?
两种情况:
答案 0 :(得分:5)
有两种方法:
如果你的会话不是Serializable,那就更难了。我们采取的解决方案是遵循sizeofagent technique。它使用[Instrumentation.getObjectSize()方法](http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize(java.lang.Object))。它要求您使用特殊代理启动JVM:
java -javaagent:sizeofag.jar
答案 1 :(得分:3)
没有标准的方式来做这件事。事实上,实际上并没有一种特别好的方法来衡量一个物体,假设它不仅仅是一个灵长类动物。一种方法是将对象序列化为字节数组,并将其作为大小的指示符。
一个选项是使用像YourKit这样的分析器,可以很好地计算参考的保留大小。
可能有供应商特定的API,因为大多数SessionManager必须序列化会话数据以进行复制和持久化。