据我所知,从JDK
8开始,PermGen将成为Java历史的过去。一切都很好,很快乐……但是新的内存布局会是什么样?这会影响新平台上的GC吗?
1.1 程序计数器 JVM 支持多线程同时执行,每个线程都有自己的程序计数器,线程正在执行 Java 代码,则存放正在执行的指令地址,如果正在执行 C 代码(本地方法),则为空。 1.2 虚拟机栈 线程私有,每个方法创建一个栈帧,用于存储局部变量表(this、参数列表、局部变量)、操作数栈(将下一个指令入栈,执行时出栈)、动态链接、方法出口等信息。方法从调用到执行完成对应栈帧的入栈到出栈,线程内串
问题内容: 我正在读取一个很大的文件,并从每一行中提取文本的一小部分。但是,在操作结束时,我的工作记忆很少。似乎垃圾收集器在读取文件后无法释放内存。 我的问题是:有什么办法释放这种记忆?还是这是JVM错误? 我创建了一个SSCCE来演示这一点。它读取一个1 mb(由于16位编码,在Java中为2 mb)的文件,并从每行中提取一个字符(约4000行,因此大约为8 kb)。测试结束时,仍将使用全部2
问题内容: 谁能 建议一本书 (或任何其他来源)来彻底揭示 JVM内存管理和垃圾回收的内部知识 (优化,工作,循环引用,特殊性,各种JVM隐喻的讨论…)? [到目前为止,我发现的是单独的文章,涉及各个方面,但没有重量级的书:)。这里是一些用于实施Hotspot的好材料。] 非常感谢您提供的任何建议。 问题答案: 如果您寻找与 供应商无关的 资源来揭示和彻底描述所有已研究/设计的各种GC算法,我建议
问题内容: 我倾向于让学生或寻求资源的同事提出很多这些问题,因此我希望为他们提供更明确的参考。 最好与社区分享。 Java内存模型是如何表示的?它的特点是什么? 垃圾收集在一般情况下以及在最常见的JVM中如何工作? 如何测试和调整Java应用程序的性能? 问题答案: 记忆基础 每个程序员应该了解的内存知识 -Ulrich Drepper [ PDF ] Java语言和虚拟机规范 Java虚拟机规范
问题内容: 我是一名进入Java世界的C ++程序员。而且我不能摆脱必须让Java垃圾收集器进行清理的不良感觉。 例如,此代码在Java中的行为如何? 当myFunction()退出时,是否将删除局部变量对象? 我是否必须在退出之前将object设置为null,否则它将超出范围并被GC删除?或者,在最坏的情况下,它会像在C ++中那样泄漏吗? 问题答案: 不再使用后 ,将 在某个时候 将其收集 为
垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal