小编Jun*_*lez的帖子

分配大于堆的数组时出现意外的 OutOfMemoryError

今天我在玩 OOM 错误,我发现了一些我自己无法解释的东西。

我尝试分配一个大于堆的数组,预期会出现“请求的数组大小超出 VM 限制”错误,但我收到了“ Java 堆空间”错误。

根据JDK 11 文档“3 Troubleshoot Memory Leaks > 了解 OutOfMemoryError 异常”

线程 thread_name 中的异常:java.lang.OutOfMemoryError:请求的数组大小超出 VM 限制

原因:详细消息“请求的数组大小超出 VM 限制”表明应用程序(或该应用程序使用的 API)试图分配大于堆大小的数组。例如,如果应用程序尝试分配 512 MB 的数组,但最大堆大小为 256 MB,则将抛出 OutOfMemoryError,原因是“请求的数组大小超出 VM 限制”。


代码 :

public class MemOverflow {

    public static void main(final String[] args) {
        System.out.println("Heap max size: " + (Runtime.getRuntime().maxMemory() / 1024 / 1024) + "MB");
        long[] array = new long[100_000_000]; // ~800MB
        System.out.println(array.length);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码按预期工作,堆足够大以存储我的数组:

$ javac MemOverflow.java && …
Run Code Online (Sandbox Code Playgroud)

java heap-memory out-of-memory java-11

14
推荐指数
1
解决办法
969
查看次数

WPF Metro Window全屏

我目前正在研究WPF应用程序,但我找不到如何全屏显示我的应用程序.我正在使用MahApps.Metro,所以我的主窗口类型是Controls.MetroWindow.

我试过这个:

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      WindowStyle="None"
                      ResizeMode="NoResize"
                      WindowState="Maximized"
                      Title="MyProject">
Run Code Online (Sandbox Code Playgroud)

但它不会隐藏Windows任务栏.但是当我使用一个简单的Window时,它可以工作.我看了一下MetroWindow的源代码,它继承了Window类,所以我不明白为什么它不起作用.

我发现使用Metro的全屏窗口的唯一方法是将IgnoreTaskbarOnMaximize属性设置为true并删除ResizeMode ="NoResize"(请参阅下面的代码),运行应用程序并最大化它.

<Controls:MetroWindow x:Class="MyProject.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                      xmlns:Views="clr-namespace:MyProject.Views"
                      WindowStyle="None"
                      IgnoreTaskbarOnMaximize="True"
                      Title="MyProject">
Run Code Online (Sandbox Code Playgroud)

但是我想隐藏最小化和最大化按钮..你有什么想法全屏启动Controls.MetroWindow吗?

c# wpf xaml fullscreen mahapps.metro

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

fullscreen ×1

heap-memory ×1

java ×1

java-11 ×1

mahapps.metro ×1

out-of-memory ×1

wpf ×1

xaml ×1