java垃圾回收的疑问

2019-03-25 13:38|来源: 网路

java垃圾回收算法中的“引用计数”法,为什么不能解决垃圾回收的问题呢?

相关问答

更多
  • ava的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式 动态回收无任何引用的对象占据的内存空间。 需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象 本身,很多人回答的含义是回收对象,实际上这是不正确的。 System.gc() Runtime.getRuntime().gc() 上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机 制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发 生作用时的原理一样。 程序员只能通过上面的 ...
  • 有没有可能用软引用管理一下引用,可能会有用,虚拟机在内存溢出之前会回收这种引用的内存,之后如果不够才会报内存溢出;
  • 如果一直没有引用肯定是会被GC的 你自己看下强引用 弱引用 虚引用就知道了
  • 所以,问的是jvm的垃圾回收机制是什么。可以google jvm的GC原理。
  • 垃圾收集器是一个在Java虚拟机上运行的程序,它可以摆脱Java应用程序不再使用的对象。 它是一种自动内存管理的形式。 当一个典型的Java应用程序正在运行时,它正在创建新的对象,如String和File ,但在一段时间后,这些对象不再被使用了。 例如,看看下面的代码: for (File f : files) { String s = f.getName(); } 在上面的代码中,在for循环的每次迭代中都创建了String s 。 这意味着在每次迭代中,都会分配一点点内存来创建一个String ...
  • 现在在一个字符串的情况下,情况并非如此,因为字符串将进入字符串池,并且JVM将保持对象活动以重新使用。 所以这意味着一旦创建的字符串将永远不会被垃圾收集? 首先,它是String 文字 ,可以自动被内联/添加到String池中。 由应用程序创建的字符串不被内联...除非您的应用程序显式调用String.intern() 。 其次,事实上,String池中垃圾收集对象的规则与其他字符串/其他对象相同。 如果这些字符串变得无法访问,这些字符串将被垃圾回收。 实际上,对应于String文字的String对象通常不 ...
  • 那么我终于找到了导致这个问题的问题,而且我发布了一个详细的答案,以防别人有这些问题。 我在程序执行过程中尝试过jmap,但这通常会导致jvm进一步挂起,我必须用--force来运行它。 这导致堆转储似乎缺少大量数据,或者至少缺少它们之间的引用。 为了分析,我尝试了jhat,它提供了大量的数据,但并没有太多的解释方式。 其次,我尝试了基于eclipse的内存分析工具( http://www.eclipse.org/mat/ ),它显示了堆大部分是与tomcat相关的类。 问题是jmap没有报告应用程序的实际状 ...
  • 问题是考虑所有这些事情并创建适当数量的线程的最佳方法是什么 我会使用Java 8来为你做这件事。 例如 Results result = listOfWork.parallelStream() .map(t -> t.doWork()) .collect(Collectors.reduce(.....)); 但是,如果您遇到Java 7,则可以使用ExecutorService。 int procs ...
  • 在Java 1中 ,我不相信在instanceMethod()执行时可以收集对象。 在main方法的堆栈框架中,至少在逻辑上存在对该对象的引用(JIT编译器可能会忽略它)。 事实上,你没有把它分配给一个变量,并不会影响字节码。 当然,当instanceMethod()完成时,该对象可能有资格进行垃圾回收 - 但它可能不会。 例如, instanceMethod()可以在静态变量中存储this的引用。 基本上不值得挂在错综复杂的角落案例上 - 只需要依靠GC收集无法以任何方式再次到达的物体,而不是收集可能仍在 ...
  • 是否真的有必要在连接上调用Close() 是。 或垃圾收集器会自动做到这一点? 未指定。 也许有些实现会这样做。 你不能依靠它。 我相信GC会引起额外的延迟。 GC可能永远不会发生。 你无限可以吗? 我只是不想让这些关系永远保持开放。 你不希望他们保持开放的时间超过必要的时间。 他们是稀缺资源。 不要浪费他们。 “建议程序员在不再需要时立即关闭所有连接(使用方法Connection.close)和语句(使用Statement.close方法),从而尽早释放DBMS资源。” is it really nece ...