V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hqtc
V2EX  ›  Java

PowerMock + Mockito 内存占用太大

  •  
  •   hqtc · 2017-11-30 21:24:07 +08:00 · 2943 次点击
    这是一个创建于 2311 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写单元测试使用 PowerMock + Mockito 进行 Mock, Jvm 内存分配 512 M, 写到一定数量之后突然报 OOM, 经过分析是永久区 PermGen 爆炸。切换 jdk 1.8 之后可以运行, 又补充了一堆用例之后, 元空间 MetaSpace 爆炸。

    经过 jmap -heap [pid] 打印:

    
    
    Eden Space:
       capacity = 163053568 (155.5MB)
       used     = 158304616 (150.9710464477539MB)
       free     = 4748952 (4.528953552246094MB)
       97.08748967701216% used
    
    PS Old Generation
       capacity = 358088704 (341.5MB)
       used     = 358061344 (341.4739074707031MB)
       free     = 27360 (0.026092529296875MB)
       99.99235943505217% used
    

    然后 jmap -histo:live [pid], 发现大堆的反射和 Mock 对象存活:

     sun.reflect.GeneratedSerializationConstructorAccessor999
     
     org.powermock.api.mockito.mockmaker.PowerMockMaker
     
     org.mockito.internal.stubbing.defaultanswers.TriesToReturnSelf
    

    所以各位大佬有用过这东西的吗,,除了改内存参数还有别的办法吗,, 是不是我使用的姿势不对?

    7 条回复    2017-12-01 10:22:25 +08:00
    BBCCBB
        1
    BBCCBB  
       2017-11-30 22:01:37 +08:00
    你写的测试用例很多吗???
    jdk8 以下可以通过调整 PermSize 和 MaxPermSize
    YellowLittleDog
        2
    YellowLittleDog  
       2017-11-30 22:31:24 +08:00 via Android
    Android 的单元测试应该,没发现什么问题。
    AccIdent
        3
    AccIdent  
       2017-11-30 22:37:37 +08:00
    看一下哪些对象在引用这些,目测可能是成员变量没有在 tearDown 里面解除引用
    ewBuyVmLZMZE
        4
    ewBuyVmLZMZE  
       2017-11-30 22:45:35 +08:00
    在我看来,一切需要用 PowerMock 才能写的测试,说明现有代码抽象有问题。
    hqtc
        5
    hqtc  
    OP
       2017-12-01 09:28:53 +08:00
    @AccIdent 有 teardown 机制吗
    lawrencexu
        6
    lawrencexu  
       2017-12-01 09:39:23 +08:00
    试试 JMockit ?
    seancheer
        7
    seancheer  
       2017-12-01 10:22:25 +08:00
    1.8 之后,metaspace 只有 class 的 metadata,难道你的类很多?导致加载到 jvm 中的 metaspace 空间不够了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2432 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:01 · PVG 00:01 · LAX 09:01 · JFK 12:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.