jjzjj

java - GC 是否从 Metaspace 收集垃圾?

我一直认为垃圾收集器只清除堆,现在我这么认为。在java8中,permGen被删除并被Metaspace取代。据我所知,Metaspace是垃圾收集器(https://stackoverflow.com/a/24075360/2674303)谁从Metaspace收集垃圾? 最佳答案 我认为您的困惑源于口语化的术语“垃圾收集”,该术语被广泛使用但并未真正描述托管环境中发生的情况。内存管理是一个复杂的过程,它被简化为:识别哪些对象是垃圾,其实就是判断哪些对象可达(读作:不是垃圾),没有遇到的都认为是垃圾如有必要,将对象引用排队到引用队

java - 覆盖静态创建的对象中的方法

全部,由于我正在使用的库中存在错误,我需要覆盖所有扩展特定类的对象的dispose()方法并使其成为NO-OP。我知道如果我直接创建类的新实例,这很容易做到:layerManager=newLayerManagerLayer(wwd){@Overridepublicvoiddispose(){}};问题是我得到的很多对象实例不是由我的客户端代码直接构建的,而是通过静态库方法调用创建的。//HereIwanttooverridethedisposemethod,butIcannot.Layerl=ShapefileLoader.makeShapefileLayer(this.getCla

Java:方法不返回。 (XComponent.dispose

我使用Java程序中的OpenOfficeAPI为我处理文档。有时(每100k次左右调用一次)Document的dispose方法不返回,CPU负载保持在100%,但似乎什么也没有发生。在这种情况下我应该如何正确操作/编码?我目前的做法是等待dispose成功两秒。如果没有,我会尝试通过适当的API终止OpenOffice。如果这也失败了(如我所料),那么我会通过调用来终止soffice进程XDesktopxDesk=(...)//achivedesktopxDesk.terminate();Runtime.getRuntime().exec("pkillsoffice");//"ta

java - 从 JDialog 返回值; dispose(), setVisible(false) - 例子

我知道,这个问题经常出现在SO中,例如here:但我想举一些非常具体的例子……我只是不确定我做的是否正确。我有一个JDialog,我可以在其中键入一些值,选择一些复选框......随便......我还在MyDialog中创建了一些Response对象,它表示MyDialog的“答案”。在调用/创建JDialog的JFrame中:MyDialogd=newMyDialog(this,...);d.showDialog();//AfterMyDialogisclosed(it'smodal):MyDialog.ResponsedialogResponse=d.getDialogRespon

Java Swing dispose() 与 setVisible(false)

我有一个独立的Java应用程序,它从数据库中获取数据并将其显示在JTable中。当应用程序启动时,系统会在JDialog中提示用户输入用户名/密码。输入正确的凭据后,将显示包含数据的主JFrame。在主JFrame上,我有一个注销按钮,单击该按钮时,应关闭主JFrame并重新显示登录JDialog。除了我发现单击注销按钮时主JFrame不会消失外,一切都正常。下面是我的代码的一个小示例:主.java:importjavax.swing.SwingUtilities;publicclassMain{publicstaticvoidmain(String[]args){SwingUtili

java - 为什么在 Graphics 对象上调用 dispose() 会导致 JPanel 不呈现任何组件

在得知dispose()应该在Graphics/Graphics2D对象上调用后,我着手改变我的游戏以合并它.当我在JPanel的覆盖paintComponent(Graphicsg)中添加g2d.dispose()时,我添加的组件(扩展JLabel类)在没有呈现的地方我仍然可以点击它们等但它们不会被绘制。我用普通的JLabel和JButton进行了测试,效果相同(虽然JButton在鼠标悬停时呈现)。所以我的问题是为什么会发生这种情况?这是一个SSCCE来演示:在MainMenuPanel类的paintComponent中取消对dispose()的调用后:importjava.awt

java - 为什么必须对超出范围的 java.awt.Window 进行 dispose()?

我在我们的应用程序中发现的内存泄漏之一是java.awt.Window.allWindows私有(private)静态字段,它跟踪每个实例化的Window。我们有创建、使用然后被遗忘的对话框,并且期望这些对话框会消失并被垃圾收集。这个私有(private)字段将它们无限期地保留在范围内,直到对它们调用dispose()方法。根据定义,当它们超出范围时我们不能这样做。我不明白为什么要这样设计。似乎有悖于垃圾回收的精神,必须明确地让系统知道我何时完成了Window对象。显然我已经完成了它,因为它超出了范围。我明白dispose()方法在做什么:摆脱系统对等对象。我知道这是在Java之外,您

java - 如果调用 doOnSubscribe() 返回的对象,RxJava2 dispose() 不起作用

我无法理解为什么以下代码不起作用。我做错了什么还是RxJava2实现中的某种错误?privateDisposablesavedDisposable;@Testpublicvoidtest(){finalTestObserverobserver=newTestObserver();Observablet=Observable.just(10).delay(100,TimeUnit.MILLISECONDS).doOnSubscribe(disposable->savedDisposable=disposable);t.subscribe(observer);savedDisposable

C#/命令行界面 : Destructor not called if Dispose() used in it

我有一个名为“CTransferManaged”的C++/CLI类,其中实现了终结器和析构函数:CTransferManaged::~CTransferManaged(){this->!CTransferManaged();}CTransferManaged::!CTransferManaged(){//Cleanupresources...}此类由名为“CTransfer”的C#类包装,其中包含类型为CTransferManaged的​​对象m_transfer。如果此类的析构函数仅清除对对象m_transfer的引用,我可以看到调用了析构函数(命中断点):~CTransfer(){

c# - 终止前清理?

这个问题困扰了我一段时间:我在MSDN的DirectX中阅读过article以下内容:Thedestructor(oftheapplication)shouldreleaseany(Direct2D)interfacesstored...DemoApp::~DemoApp(){SafeRelease(&m_pDirect2dFactory);SafeRelease(&m_pRenderTarget);SafeRelease(&m_pLightSlateGrayBrush);SafeRelease(&m_pCornflowerBlueBrush);}现在,如果应用程序的所有数据都在终止时