有没有人设法在Hotspot中使用超过120GB RAM的Concurrent Mark Sweep垃圾收集器(UseConcMarkSweepGC)?
如果我将-ms和-mx设置为120G,JVM就会正常启动,但是如果我将它们设置为130G,则JVM会在启动时崩溃.JVM使用并行和G1收集器启动良好(但它们有自己的问题).
有没有人设法使用超过120GB堆的Concurrent Mark Sweep收集器?如果是这样,你有什么特别的,或者我只是在这里不走运?
来自JVM错误转储的堆栈如下:
Stack: [0x00007fbd0290d000,0x00007fbd02a0e000], sp=0x00007fbd02a0c758, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libc.so.6+0x822c0] __tls_get_addr@@GLIBC_2.3+0x822c0
V [libjvm.so+0x389c01] CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray*, MemRegion, bool, FreeBlockDictionary::DictionaryChoice)+0xc1
V [libjvm.so+0x3d1ae0] ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration(ReservedSpace, unsigned long, int, CardTableRS*, bool, FreeBlockDictionary::DictionaryChoice)+0x100
V [libjvm.so+0x49d922] GenerationSpec::init(ReservedSpace, int, GenRemSet*)+0xf2
V [libjvm.so+0x48d0b9] GenCollectedHeap::initialize()+0x2e9
V [libjvm.so+0x824098] Universe::initialize_heap()+0xb8
V [libjvm.so+0x82657d] universe_init()+0x7d
V [libjvm.so+0x4cf0dd] init_globals()+0x5d
V [libjvm.so+0x80f462] Threads::create_vm(JavaVMInitArgs*, bool*)+0x1e2
V [libjvm.so+0x51fac4] JNI_CreateJavaVM+0x74
C [libjli.so+0x31b7] JavaMain+0x97
Run Code Online (Sandbox Code Playgroud)
我已经用Oracle(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7175901)为此提出了一个错误,但我想知道是否有其他人见过它.
java garbage-collection jvm jvm-hotspot concurrent-mark-sweep
是否有任何存在于scalatest中等待一段时间让一个断言变为真的?
所以,例如,如果我有一个异步计算某个东西的线程,我想在我的测试中等待计算等于期望值.
Scala中以下Java方法声明的等效内容是什么:
public <T> T readValue(java.lang.String s, java.lang.Class<T> tClass)
Run Code Online (Sandbox Code Playgroud)
换句话说,我想声明一个采用类型为T的类的方法,并返回该类型的实例.
我有一个简单的测试,我使用该run_forever
方法运行Python asyncio事件循环,然后立即在另一个线程中停止它.但是,事件循环似乎没有终止.我有以下测试用例:
import asyncio
from threading import Thread
loop = asyncio.get_event_loop()
thread = Thread(target=loop.run_forever)
thread.start()
print('Started!')
loop.stop()
print('Requested stop!')
thread.join()
print('Finished!')
Run Code Online (Sandbox Code Playgroud)
此测试用例打印:
Started!
Requested stop!
Run Code Online (Sandbox Code Playgroud)
因此,测试似乎阻塞thread.join()
,等待事件循环终止.
如果我转储我的线程,我得到以下内容:
Thread 0x00007000087ec000 (most recent call first):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/selectors.py", line 577 in select
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/asyncio/base_events.py", line 1388 in _run_once
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/asyncio/base_events.py", line 421 in run_forever
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 862 in run
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 914 in _bootstrap_inner
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/threading.py", line 882 in _bootstrap
Current thread 0x00007fffc6b273c0 (most recent call first): …
Run Code Online (Sandbox Code Playgroud) 我在我的asyncio事件循环上设置了一个异常处理程序。但是,它似乎直到事件循环线程停止后才被调用。例如,考虑以下代码:
def exception_handler(loop, context):
print('Exception handler called')
loop = asyncio.get_event_loop()
loop.set_exception_handler(exception_handler)
thread = Thread(target=loop.run_forever)
thread.start()
async def run():
raise RuntimeError()
asyncio.run_coroutine_threadsafe(run(), loop)
loop.call_soon_threadsafe(loop.stop, loop)
thread.join()
Run Code Online (Sandbox Code Playgroud)
如我们所料,此代码将显示“已调用异常处理程序”。但是,如果我删除关闭事件循环(loop.call_soon_threadsafe(loop.stop, loop)
)的行,它将不再打印任何内容。
我对此有一些疑问:
我在这里做错什么了吗?
有谁知道这是否是asyncio异常处理程序的预期行为?我找不到任何可以证明这一点的文件,这对我来说似乎有点奇怪。
我非常希望有一个长时间运行的事件循环,该循环记录其协程中发生的错误,因此当前行为对我来说似乎是有问题的。