1)内存结构
堆 |
Young新生代 |
Eden(伊甸) |
|
Survivor(幸存者) |
from区和to区,严格一致 |
||
Tenure老生代 |
|
||
非堆 |
栈 |
线程栈 |
线程私有,基本的数据类型和引用,方法出口后进先出 数据可共享,如a=3;b=3;指向同一个 |
本地方法栈 |
为调用Native方法服务 |
||
程序计数器 |
线程私有,程序执行的位置 |
||
永久代PermGen space |
方法区 |
线程共享,类信息,运行时常量池 (编译期生成的字面量和符号。String intern方法) |
|
静态域 |
static静态成员 |
||
直接内存 |
NIO中用native函数分配堆外内存,通过DirectByteBuffer来引用,避免java堆和Native堆的来回复制 |
周期:Eden-Survivor-Tenure,from to 复制
new出的对象?new对象里的引用在哪?应该是堆里对象中要存储一份引用,栈里也要存一份。
2)dump内存
如果要查内存泄露,必须先dump出JVM 的heap:
/usr/java/bin/jmap -dump:file=hprof-jvm.bin -F PID (进程号)
dump到文件以后下载到本地,用工具查看,工具会给你列出最耗内存的地方,然后你可以根据内存的变化来判断这些代码存在内存泄露的可能性。
Eclipse Memory Analysis Eclipse 插件在线安装地址:http://download.eclipse.org/mat/1.0/update-site/
<!--[if !supportLists]-->1. <!--[endif]-->在histogram的filter中输入.*类名.*来查找类要监控的类信息。
<!--[if !supportLists]-->2. <!--[endif]--> List objects -> with incoming references
<!--[if !supportLists]-->3. <!--[endif]--> Path To GC Roots -> exclude weak/soft references, 过滤掉弱引用
system class loader在没有指定装载器的情况下默认装载用户类,在Sun Java 1.5中既sun.misc.Launcher$AppClassLoader
shallowHeap对象自身占用的内存大小,不包括它引用的对象 RetainedHeap
树形是对象的引用链条不是方法调用链条
在崩溃之前dump: -XX:+HeapDumpOnOutOfMemoryError
3)垃圾回收
垃圾判断
引用计数 |
当有引用连接对象时计数加1,引用离开作用域或置为null时引用减去1,开销在整个生命周期,要处理循环引用,基本不采用 |
根搜索法 |
从堆栈和静态存储区开始,遍历所有的引用 |
回收垃圾
标记-清除 |
一轮标记哪些需要清除,一轮进行清除(如果对象比较稳定,回收器会自动切换到标记-清除模式) |
停止-复制 |
先暂停程序的运行,把活着的对象从当前堆拷贝到另一个堆,没有复制的全是垃圾 位于堆或静态存储区的引用可以直接直接被修正 |
4)GC调优
两个指标是吞吐率(除去垃圾回收所用时间占总时间的百分比)和停顿时间(垃圾回收需要停顿应用的时间)
-XX:MaxGCPauseMillis=5000 |
GC最大停顿时间,尽力保持在指定毫秒以内, 如果无法满足,则相应的内存区会缩小,以缩短GC的停顿时间。 |
-XX:GCTimeRatio=19 |
1/(1+19)=1/20=5%默认值为99,即GC时间占总的应用运行时间为1%。如果无法满足,相应的内存区会扩大,以提高应用在两次GC间的运行时间 |
-Xms2048 -Xmx2048 |
表示jvm堆内存大小,以及最大堆内存大小。一般设为同样大小 |
-Xmn768m |
是将NewSize与MaxNewSize设为一致。表示新生代初始内存大小,以及最大新生代内存大小。一般情况下建议设置为总堆内存的3/8。 |
-XX:PermSize=512m -XX:MaxPermSize=512m |
设置永久区初始内存以及最大内存。建议设置为同样大小 |
-XX:NewRato=3 |
NewSize(-Xmn)已设置,此项可不设。young(新生代) 和 tenured(老生代)的比例是1:3 |
相关推荐
7. **删除临时文件和日志**:清理系统临时文件夹(如Windows的%temp%目录)中的虚拟机相关文件和日志,这些文件通常在卸载过程中不会被删除。 8. **重启计算机**:卸载完成后,建议重启电脑以确保所有更改生效,并...
虚拟机相关配置及上网 在本文中,我们将讨论在虚拟机中安装 CentOS 7 后,搭建 Hadoop 集群时,虚拟机的相关网络配置 及克隆虚拟机后无法上网问题解决,以及使用外部连接工具 Xshell 无法连接虚拟机的解决方案。 ...
【X86虚拟机相关资料研究与实现】 虚拟机技术是现代计算机系统中不可或缺的一部分,尤其是在软件开发、测试和云计算环境中。X86虚拟机允许在单个物理硬件上运行多个独立的操作系统实例,每个实例都仿佛在拥有专属...
“加入VIP会员.txt”可能包含了获取更多虚拟机相关高级教程或资源的途径,VIP会员可能享有更深入的技术支持、高级教程和社区资源。 最后,“欢迎进入黑客世界.url”可能是一个链接,指向一个专注于信息安全和虚拟机...
- 然后,将 `eax` 赋值为 `'VMXh'`,表示要读取的是与虚拟机相关的特征码。 - 将 `ecx` 设置为 `10`,这是检测 VMWare 特征码的标志之一。 - 使用 `in eax, dx` 指令从端口 `dx` 读取数据到 `eax` 寄存器中。 - 最后...
- 工具和服务:虚拟机相关的工具和服务可能没有卸载干净,例如VMware Tools或VirtualBox Guest Additions。 2. **手动清理渣子文件**: - 使用Windows资源管理器或命令行工具(如`del`或`rmdir`)定位并删除残余...
尽管在卸载过程中可能会自动清理,但为了确保彻底,可以用注册表编辑器(如Windows的RegEdit)手动搜索与虚拟机相关的键值,如制造商名、产品名等,然后谨慎删除。 4. **清除配置文件和日志**:虚拟机软件通常会在...
标题“虚拟机.rar虚拟机.rar虚拟机.rar”可能是对一个包含多个虚拟机镜像或相关配置文件的压缩包的重复命名,这通常意味着该压缩包可能包含了不同版本或配置的虚拟机环境。可能包括不同的操作系统映像、预装软件、...
虚拟机注册表卸载工具是一种专门用于解决由于旧版本虚拟机注册信息残留导致新版本无法安装问题的应用程序。...对于经常使用虚拟机的IT专业人员来说,掌握这类工具的使用方法以及虚拟机相关的系统知识是非常必要的。
例如,要确定虚拟机是否在运行,可以使用`ps | grep vmx`命令,找出与虚拟机相关的进程ID。假设虚拟机的父进程ID为247107,那么可以使用`kill 247107`或`kill -9 247107`命令结束该进程,从而关闭虚拟机。关闭后,...
本文将深入探讨"SVM.rar"这个压缩包中的C语言实现的虚拟机,以及与代码虚拟机和虚拟机相关的知识点。 首先,"SVM"可能代表“简单虚拟机”(Simple Virtual Machine),这是一种为了教学或实验目的设计的虚拟机模型...
而“部分内容”看起来像是某种编码或者数据序列,并不能直接从中解读出与虚拟机相关的知识点。 尽管如此,基于标题推测,本文将主要围绕虚拟机的基础使用方法进行讲解。以下为虚拟机基本使用方法的相关知识点: ##...
VMware虚拟机的相关介绍涵盖了产品版本更新、技术支持、企业部署案例以及微软集群服务(MSCS)的设置等多方面的内容。 在VMware的技术文档中,提到了ESXi和vCenter Server这两个核心组件。ESXi是VMware的虚拟机管理...
根据提供的文件信息,我们可以推断出该文档与虚拟机有关,并提供了一些可能的下载链接以及相关的描述信息。接下来,我们将围绕“虚拟机”这一主题展开详细的介绍与解释,旨在为读者提供一个全面、深入的理解。 ### ...
接着遍历表中的每个条目,检查其中的字符串是否包含虚拟机相关的关键词。如果找到,就表明程序可能在虚拟机上运行。 此外,还可以通过其他方式检测虚拟环境,例如: 1. **检查注册表**:虚拟机的注册表键值可能...
【压缩包子文件的文件名称列表】包含了一系列VMware虚拟机相关文件: 1. `vmware.log`:这是VMware虚拟机的日志文件,记录了虚拟机运行过程中的各种事件和错误,用于故障排查和性能分析。 2. `CentOS7.6_mini....
3 网络工程综合实验——小型局域网与虚拟机相关资料.rar.rar
标签同样为“虚拟机命令”,再次强调了文档的核心内容,即与虚拟机相关的命令行操作技巧。 ### 核心知识点解析 #### 1. VMware虚拟机键盘快捷键 - **Ctrl+Alt+F1**:该组合键用于切换到虚拟机的第一个控制台视图...
7. **虚拟机相关文件** - KVM虚拟机配置文件位置:`/etc/libvirt/qemu/`(XML格式) - KVM虚拟机文件位置:`/var/lib/libvirt/images/` - 虚拟机运行时相关文件位置:`/var/run/libvirt/qemu/`(包括PID文件和...
《虚拟机的设计与实现》是一本深入探讨虚拟机技术的专业书籍,主要以C++语言为实现工具。...这对于想要深入理解编程语言执行机制、提升软件开发能力,或是从事虚拟机相关工作的开发者来说,是一份宝贵的资源。