- 浏览: 1011395 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
近期看了一些有关JVM和内存的资料,为了避免遗忘,特在这里作一笔记。今天说说操作系统的虚拟内存先。
虚拟内存管理(VMM)是现在操作系统广泛采用的内存管理方式,为什么出现VMM了呢,当初主 要是为了解决物理内存不足的问题,既然是不足,设计师们当然就想起来用硬盘空间来协力,使用诸如LRU(最近最少使用)之类的算法,把物理内存(Main memory)中不怎么使用的内容,转储到硬盘上以节省空间(给急需内存的程序使用),而转储到硬盘上的内容又被访问时,再转载回来( 如果总是发生这样的事,系统地效能就大大折扣了,这也是好的算法应该避免的)。
题外话:虽说VMM的实现主要是操作系统的事,但早期没有可支持VMM管理的CPU诞生时,如Intel系列,在386以前,要纯粹依靠OS自身做VMM,不仅麻烦而且效率也很差。要知道VMM是1960年以前就有这概念了,早期的实现者(如果有的话)肯定很郁闷。
继续正题,怎么做到VMM的呢,首先要定义一个概念,叫做虚拟地址空间(virtual memory spaces),这个空间就是进程是装载和运行的容器,以win32为例,32位的虚拟地址空间(virtual memory spaces)可以达到4GB那么大,这对于一般应用程序来说,几乎是富裕的太多了。这么大的空间,为了便于管理,首先按照特定粒度划分一个最小的基本单 元,叫做页(Page),比如等于64kb吧,页有三类:Free,Reserved,Committed,Free的页对于进程来说,等于是不可用的, 任何读写free页的行为都是极其无耻卑劣和下流的,要被OS严惩不贷(可以放心的是,你的Java程序不会发生这类行为,只有那些可以直接内存寻址的语 言才可能发生);而Reserved的页是进程保留将来要使用的,这部分暂时还没有实际对应(物理内存或硬盘);Committed是OS已经提交给进程 供其使用的,这部分虚拟内存可以由虚地址转换到实际的物理地址。
为什么要先说VMM呢,这和JVM有啥联系呢?这是因为JVM的堆(指Java heap)内存是动态扩张的,但它又总是连续的(JVM为了便于垃圾清理),怎么做到这样呢?JVM会首先申请一大块内存作堆,而其中只有开始使用的部分 是Committed的,剩余的都是Reserved的,随着扩张过程,逐步把Reserved的变成Committed。而当JVM发觉堆过大值得减小 时,又会把尾部的一部分堆释放回Reserved状态。
访问虚拟空间的每个地址的内容时,首先会把这个虚拟地址转换成物理地址,转换过程一般由cpu 自己来完成,很快&很准,所以你不用担心速度问题或者转换出错。每一页的基址转换好了,页内的地址用过偏移地址访问即可,几乎没有转换的开销。所 以把这个转换的过程叫做Paging,如果页是Free的, CPU会发生access violation,二话不说就直接转去执行寻址违例的处理过程,所以windows蓝屏会来的那么突然啊!如果页是Resreved或者页被交换到硬盘 上,这时不能直接在物理内存中找到对应,那么发生Page fault,CPU转去执行相应例程做补救,把页交换回来,过程虽然费事,但进程自己什么也感觉不到(用户可就不能幸免了)。这些关键功能都是现代CPU 直接具备的,OS只要把相应处理例程准备好就OK。
附一张切来的paging示意图,点击 可看大图。
到此,一个庞大的虚拟地址空间就完全为进程准备好了,但别以为应用程序能够使用它的全部,因为操作系统及接口也是应用程序赖以生存的必不可少的,它们往往也预先落户在进程的虚拟地址空间里。
VMM还促使动态链接库(dll)技术(这个和jni有点联系)大行其道,这是别话了。
注:棕色部分为后补内容。
发表评论
-
A Collection of JVM Options
2011-06-24 12:59 1158A Collection of JVM Options ... -
java中堆(heap)和堆栈(stack)有什么区别
2011-05-10 14:29 893stack 和 heep 都是内存的一部分 stack 空间 ... -
JVM & Memory (5) final
2011-05-10 14:25 995先说tuning,gc有两个指标,一个是frequentcy( ... -
JVM & Memory (4) gc
2011-05-10 14:22 911不同的JVM实现对堆结构的设计有所不同,这里先说说共性的,然后 ... -
JVM & Memory (3) thread
2011-05-10 14:21 907以下继续探讨,说说jvm ... -
JVM & Memory (2) java.exe
2011-05-10 14:20 945上篇说到了关于java heap ... -
JDK TOOLS
2011-05-10 14:15 813以下这几种工具(存在于 ... -
jvm日志分析工具应用
2011-05-10 14:14 2817涛涛学习笔记之gc日志分析工具 测试环境:xp+weblog ... -
JVM优化配置
2011-05-10 13:56 935OOM 这个缩写就是Java程 ... -
高手详细介绍JVM是什么?
2011-05-10 13:52 874首先这里澄清两个概念:JVM实例和JVM执行引擎实例,JVM实 ... -
JVM监控工具介绍
2011-03-22 14:25 891... -
正确认识java JVM与c/c++的执行效率
2011-03-22 10:43 1412认为Java 不能写JVM是完全错误的。JNode是一个用 ... -
Java虚拟机(JVM)参数配置说明
2011-03-22 10:26 986Java虚拟机(JVM)参数配置说明 ... -
解析 Java 类和对象的初始化过程
2011-03-21 23:40 909解析 Java 类和对象的初始化过程 由一个单态模式引出的问 ... -
JDK的概念、组成及JDK常用包
2011-03-18 22:09 1139JDK概述 JDK (Java Development ... -
安装JDK后JRE与JVM联系浅谈
2011-03-18 22:08 917安装JDK后JRE、JVM之间的 ... -
详细介绍什么是Java虚拟机
2011-03-18 22:07 842本文由浅入深,先从什么是Java虚拟机、Java虚拟机 ... -
认识Java虚拟机及其性能
2011-03-18 22:04 727Java虚拟机(Java virtual ... -
JVM GC调整优化过程全揭秘
2011-03-18 22:03 840JVM GC调整优化是以个极为复杂的过程,由于各个程序具备 ... -
Java虚拟机的研究与实现(图文)
2011-03-18 21:59 1033引言 Java 虚拟机本质是就是一个程序,当它在命令行 ...
相关推荐
1. **并发标记阶段**:G1使用并发标记清除算法,能在应用线程运行的同时进行垃圾收集,减少停顿时间。 2. ** Region划分**:通过Region划分,使得GC可以更灵活地进行局部或全局的垃圾回收。 3. **暂停预测**:G1能够...
资源名称:深入理解JVM & G1 GC内容简介:G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。《深入理解JVM & G1 GC》主要为学习Java语言的...
G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。本书主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC ...
《深入理解JVM & G1 GC》这篇文章和相关压缩包文件主要聚焦于Java虚拟机(JVM)的内存管理,特别是垃圾收集器(GC)的优化,特别是G1(Garbage-First)垃圾收集器的深度解析。下面将详细阐述JVM、GC的基本概念,...
"JVM&g1gc;带书签,完整版本"的学习资料提供了深入了解JVM内存管理和G1垃圾收集器的详细内容。通过对G1的理解和实践,开发者可以更好地优化Java应用的性能,降低垃圾收集对应用运行的影响,实现更高效的内存管理。这...
"JVM Memory View"工具,版本号为0.93.162,就是针对这一需求而设计的JVM调试内存查看器,专为Android Studio用户提供了一个直观、高效的内存分析解决方案。 一、JVM内存概述 Java虚拟机内存主要分为以下几个区域...
jvm memory
1. **JConsole**:提供实时监控JVM状态,查看内存、线程、类加载等信息。 2. **JProfiler**:强大的性能分析工具,支持CPU、内存、线程等多方面调优。 3. **VisualVM**:集成了多种JDK自带工具,提供丰富的性能监控...
1 什么是性能优化\ 2 性能测试与优化\ 3 性能优化JVM篇\ 4 性能优化Tomcat篇\ 5 性能优化mysql篇\
《深入解析MemoryAnalyzer:JVM堆内存分析利器》 在Java开发中,内存管理是至关重要的环节,良好的内存管理能够优化应用性能,防止内存泄漏,提升系统稳定性。MemoryAnalyzer(MAT)是一款强大的JVM堆内存分析工具...
《深入理解MemoryAnalyzer:JVM内存分析利器》 在Java应用程序的开发和优化过程中,内存管理是一项至关重要的任务。MemoryAnalyzer(MAT)是一款强大的JVM内存分析工具,它能够帮助开发者深入洞察应用的内存占用...
很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。PPT也可以在这里下载: https://github.com/hitynsun/docs/tree/master/JVM 也希望大神们可以批评指正...
1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类文件(ClassFile)、内存管理及垃圾收集机制。类加载器负责将.class文件加载到内存中,为程序的运行准备数据结构。内存管理涉及JVM内存区域,包括堆、栈、...
JVM(Java虚拟机)是Java平台的核心组件,提供了一个抽象的计算环境,使得Java程序能够在不同的操作系统上运行,实现平台独立性。JVM将Java程序编译成特定的二进制格式——类文件格式,使得Java虚拟机本身对Java编程...
内存溢出(Out Of Memory,OOM)是JVM运行过程中常见的问题,主要类型有堆溢出、栈溢出、方法区溢出等。通过分析日志和调整参数可以解决这些问题。 总结,JVM是Java编程的关键组成部分,理解其工作原理、内存模型和...
1. JVisualVM:集成在JDK中的多合一工具,可以提供内存分析、线程监控、CPU剖析等功能,方便开发者实时查看JVM状态。 2. JConsole:同样内置于JDK,提供GUI界面来监控Java应用程序的性能和资源消耗。 3. JProfiler:...
1. 类加载子系统:负责加载、验证、解析和初始化.class文件。加载阶段会找到类的二进制数据;验证阶段确保类数据符合Java语义和安全规定;解析阶段将符号引用转换为直接引用;初始化则执行类的静态初始化块。 2. ...
学习资料出处 ...2-129802936-null-null.142^v99^control&utm_term=%E6%9C%89%E5%85%B3Java%E7%9A%84JVM&spm=1018.2226.3001.4187
1. JConsole:这是Java自带的一款图形化监控工具,可以实时监控JVM的内存、线程、类加载等状态,辅助开发者分析和诊断问题。 2. JVisualVM:它提供了一个全面的视图,包括性能监视、线程分析、内存检测等功能,同时...