草庐IT

预约上门回收

全部标签

使用静态方法创建实例时的PHP垃圾回收

经过多次追踪,我终于弄清楚我的代码出了什么问题,所以这个问题不是“我该如何解决”,而是“为什么会这样?”。考虑以下代码:classFoo{private$id;public$handle;publicfunction__construct($id){$this->id=$id;$this->handle=fopen('php://memory','r+');echo$this->id.'-construct'.PHP_EOL;}publicfunction__destruct(){echo$this->id.'-destruct'.PHP_EOL;fclose($this->handl

java - Hikari 如何回收连接?

我很高兴你们能给我在HikariCP文档中找不到的答案。鉴于我设置了以下池参数:minimumIdle1idleTimeout10minutesmaxLifeTime20minutes当我的应用程序在夜间保持空闲(没有人发出请求)时,我希望Hikari在连接最后一个请求后10分钟关闭每个连接,在最后一个连接关闭后创建一个新连接(并将其保存在池中),然后每20分钟关闭并重新创建此空闲连接。我理解正确吗?事实是,在我的应用程序空闲一段时间后,我看到(根据下一个请求)以下异常:WARNc.z.hikari.proxy.ConnectionProxy-Connectionoracle.jdbc

java 垃圾回收和临时对象

我的职业是C++开发人员,但最近我一直在做一些Java。我正在从事的这个项目是由一位早已离开的开发人员完成的,我一直在他通过做奇怪的事情来解决垃圾收集的地方找到一些东西。案例和要点他实现了自己的字符串类以避免GC减慢应用程序的这一部分采用大型二进制文件格式并将其导出为csv。这意味着为文件中的每一行构建一个字符串(百万)。为了避免那些临时的字符串对象,他制作了一个字符串类,其中只有一个他重用的大字节数组。/**HACKAQuickandDirtystringbuilderimplementationoptimizedforGC.UsingString.formatcausestheap

java - 在 Java 中如何查看哪些对象已被垃圾回收?

请问,有什么方法可以获取在Java中被垃圾回收的对象的历史记录(它们的变量或至少是类名)?只需添加这些参数(到OracleJVM)-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamps不提供任何其他字节的内存。对我的帮助非常有限。感谢所有回复。注意:不幸的是,使用addfinilize()方法的解决方法对我来说不是一个选项(我无权访问它)。 最佳答案 您可以使用Object的finalize方法。当对象即将被GC时调用此方法。从这里,您可以记录所需的信息。

java - 为什么 Major 垃圾回收比 Minor 慢?

通过这个link但仍然对次要和主要GC收集中实际发生的事情感到困惑。假设我在年轻一代中有100个对象,其中85个对象是无法访问的对象。现在当MinorGC运行时,它将回收85个对象的内存并将15个对象移动到较旧的(永久的)代。现在老年代有15个Activity对象,其中3个是不可访问的。假设MajorGC发生了。它会保持15个对象,并为3个无法访问的对象回收内存。据说主要GC比次要GC慢。我的问题是为什么?是不是因为majorGC发生的对象数量通常比minor多,因为minorgc比major发生得更频繁?根据理解majorGC应该更快,因为它需要做的工作更少即从无法访问的对象中回收内

java - 删除未使用的字段是否会导致垃圾回收?

对于涉及异步操作的库,我必须保持对对象的引用,直到满足特定条件。(我知道,这听起来很不寻常。所以这里有一些上下文,尽管它可能并不严格相关:该对象可能被认为是一个directByteBuffer,它用于JNI操作。JNI操作将获取缓冲区的地址。此时,该地址只是一个“指针”,不被视为对字节缓冲区的引用。该地址可能会被使用异步地,稍后时间。因此,必须防止缓冲区被垃圾收集,直到JNI操作完成。)为了实现这一点,我实现了一个基本上等同于此的方法:privatestaticvoidkeepReference(finalObjectobject){Runnablerunnable=newRunnab

java - JVM 垃圾回收

一般来说(据我所知,Oracle/sun和其他第三方以及MS都有一个标准的JVM实现),JVM是否只创建一个作为守护进程运行的垃圾收集线程来收集垃圾对象,或者JVM生成多个线程来完成垃圾收集? 最佳答案 通过-XX:+UseParallelGC启用的“吞吐量收集器”是默认收集器,使用多线程。使用-XX:+UseConcMarkSweepGC启用的“并发低暂停收集器”使用一个线程作为并发收集器,但它的stop-the-world收集器是并行的。只有很少使用的单线程gc-XX:+UseSerialGC是单线程的。http://www.o

java - 即使没有 GC 根,类加载器也不会被垃圾回收

我们有一个在GlassfishV2.1.1下运行的复杂应用程序。为了能够动态加载我们的代码,我们实现了一个能够重新定义类的CustomClassloader。行为非常简单:当动态加载的类发生变化时,CustomClassloader的当前实例将被“丢弃”,并创建一个新实例来重新定义所需的类。除了同一个类被重新加载几次后(因此每次创建一个新的CustomClassloader),这工作得很好,我们得到一个PermGen空间错误,因为CustomClassloader的其他实例没有被垃圾收集。(该类应该只有一个实例)我尝试了不同的方法来追踪泄漏的位置:visualvm=>我进行堆转储并提取

java - 调用 Hashmap.remove() 后是否会立即进行垃圾回收?

Java代码如下:Randomr=newRandom(1234697890);HashMap>map=newHashMap>();Listlist=newArrayList();for(inti=0;i当i达到37553时,java.lang.OutOfMemoryError:Javaheapspace发生。循环中似乎没有发生垃圾回收。现在我想知道如何解决这个问题。 最佳答案 尝试按如下方式重写代码,你应该不会出现OOME的...Randomr=newRandom(1234697890);HashMap>map=newHashMap

java - 取消引用数组中的对象以进行 Java 垃圾回收

我对java垃圾收集器做了一些研究,了解到不再引用的对象将/应该由垃圾收集器处理。就对象数组而言,我知道将新对象分配给数组中的某个位置并不能正确释放先前分配的对象。我想知道如何从位置x的数组中删除并正确解除分配对象,以及如何将新对象分配给位置x的同一数组。我还想知道如何正确地释放数组本身。 最佳答案 将数组中的对象设置为null或另一个对象使其符合垃圾回收条件,假设没有对存储在任何地方的同一对象的引用。如果你有Object[]array=newObject[5];Objectobject=newObject()//1referenc