• 一次使用jmap评估是否可以把类似session信息挂靠在某未知框架的某暴露对象上


    有一个需求,要在内存里缓存当前用户信息,我们不被允许直接访问session,原有框架只暴露了一个App对象,我们想把用户信息挂靠该对象,我们需要确定:

    1 该对象是否用户相关,还是用户无关;如果是用户无关,哪个用户进来,框架暴露同一个app对象,那么自然无法使用
    2 用户下线后,该对象是否会回收,否则发生内存泄漏

    使用 jmap -histo:live pid 强制gc后导出内存各类对象的文本信息,检查对象数量

    (后来发现该类被guice代理增强,com.xxx.App$$EnhancerByGuice$$528a0e1a)

    步骤:
    0 初始状态,app为0


    1 每次浏览器打开,是否app+1
    打开chrome,app+1,打开ie,app再+1

    证明了该对象用户相关,非单例


    2 cookie+1,是否app+1
    电脑只有2个浏览器,能够模拟的用户上限达到了,为模拟更多的用户与app对象,有此猜想
    干掉chrome的cookie,刷新,app+1


    3 浏览器关闭,app-1
    模拟用户下线,查看app对象及用户信息能否被回收
    显示app未-1


    4 session清除,app-1
    通过第3点,可以基本确认网站未用websocket监控用户上下线,那么就是session了
    此前我们一共有3个用户,干掉2个session,显示app-2

    至此,确认,我们可以将用户信息绑定在app对象上,而且用户下线session搁置一段时间后(一般30分钟),session自然过期,相应的app对象解除gcroot,在下一次gc中将被回收,绑在上面的用户信息一同回收。

  • 相关阅读:
    【WinAPI】User32.dll注释
    Unity 用ml-agents机器学习造个游戏AI吧(1) (Windows环境配置)
    Unity C#笔记 容器类
    Unity C#笔记 委托/事件/Action/Func/Lambda表达式
    Unity C#笔记 协程
    游戏AI之模糊逻辑
    游戏AI之路径规划
    游戏设计模式——黑板模式
    游戏AI之决策结构—行为树
    游戏AI之感知
  • 原文地址:https://www.cnblogs.com/silyvin/p/12668313.html
Copyright © 2020-2023  润新知