我有一个带4GB RAM的ubuntu 14.04系统,x86_64 3.13.0-48通用内核和openjdk-7.
我的记忆用法如下:
# free -h
total used free shared buffers cached
Mem: 3.7G 3.6G 127M 988M 44M 3.3G
-/+ buffers/cache: 232M 3.4G
Swap: 0B 0B 0B
Run Code Online (Sandbox Code Playgroud)
因此,有足够的内存用作磁盘缓存,当任何应用程序需要时,应该刷新和释放(AFAIK).
所以,我尝试运行java:
# java -Xms32m -Xmx512m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
运行只java -version返回相同的结果.当有3GB的缓存内存时,为什么java不能运行?我在同一台机器上运行PostreSQL,但它的shared_buffers设置为940MB.
编辑:
我强制刷新磁盘缓存 - 仍然是相同的结果:
# free -h
total used …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下签名的函数:
def wait_for_namespaced_objects_condition(
obj_type: Type[NamespacedAPIObject],
obj_condition_fun: Callable[[NamespacedAPIObject], bool],
) -> List[NamespacedAPIObject]:
...
Run Code Online (Sandbox Code Playgroud)
这里的重要部分是NamespacedAPIObject参数。此函数采用obj_typeas 类型规范,然后创建该类型(类)的对象(实例)。然后将该类型的其他一些对象添加到列表中,然后使用mypy`obj_condition_fun类型List[NamespacedAPIObject]. This works fine and also evaluates OK with 对其进行过滤并返回。
现在,我想让这个函数通用,以便NamespacedAPIObject可以使用它的任何子类型。我的尝试是这样做的:
T = TypeVar("T", bound=NamespacedAPIObject)
def wait_for_namespaced_objects_condition(
obj_type: Type[T],
obj_condition_fun: Callable[[T], bool],
) -> List[T]:
Run Code Online (Sandbox Code Playgroud)
但是Type[T]是TypeVar,所以这不是要走的路。问题是:应该使用什么类型的obj_type参数才能使这项工作起作用?我试过Generic[T],这对我来说似乎是最合理的,但它不起作用。如果我把它放在那里obj_type: T,mypy评估这可以,但对我来说似乎是错误的。在我看来,这意味着它obj_type是一个子类型的类的实例NamespacedAPIObject,而我想说的是“T 是一个表示 子类型的类变量NamespacedAPIObject。如何解决这个问题?
[编辑] 为了更好地解释(请参阅下面的评论)为什么Type[T]对我不起作用:在我的情况下, T 的所有子类型都实现了 class method objects(),但是当我尝试像这样编写代码时:
obj_type.objects() …Run Code Online (Sandbox Code Playgroud)