本文从以下方面对JVM进行描述:
一、Java虚拟机概述与基本概念
二、堆、栈、方法区
一、Java虚拟机概述与基本概念
1、虚拟机概述
所谓的虚拟机,就是一台虚拟的机器。是一款软件,用来执行一系列的虚拟计算指令,大体可将虚拟机分为:
系统虚拟机,程序虚拟机。
系统虚拟机:Visual Box、VMare完全是对物理计算机的仿真,提供一个可完整运行操作系统的平台。
程序虚拟机:Java虚拟机,如:HotSpot,专门为了执行单个计算机程序而设计的,java虚拟机执行的是字节码指令。
一般系统虚拟机收费标准为:内核、内存、硬盘、带宽等方法进行收费。
2、基本概念说明
(1)类加载子系统:负责从文件系统或者网络中加载Class信息,加载后的信息放到方法区内存空间中。
(2)方法区:就是存放类信息、常量信息、常量池信息、包括字符串、数字字面量等。
(3)Java堆:在java虚拟机启动时候建立java堆,他是java程序最主要的工作内存区域,几乎所有的对象实例都放在java堆中,堆是所有线程共享的内存区域。
(4)直接内存:Java的NIO库允许java程序使用直接内存,从而提高性能,通常直接内存的速度会优于java堆。读写频繁的场合会使用。
(5)每个虚拟机的线程都有一个私有的栈,一个线程的java栈在线程创建的时候被创建,java的栈中保存在局部变量、方法参数、同时java方法的调用、返回值等。
(6)本地方法栈和java栈非常类似,最大的不同为本地方法栈用于本地方法的调用。java虚拟机允许java直接调用本地方法。
(7)垃圾收集系统是java的核心,也是必不可少的。java有一套自己的垃圾收集机制,无需开发人员手工清理。
(8)程序计数器:每个线程私有的内存空间。java虚拟机为每个线程创建一个程序计数器。
(9)虚拟机最核心的组件就是执行引擎,他负责执行虚拟机的字节码。
二、堆、栈、方法区
堆是用来解决数据的存储问题,数据怎么放、放在那儿。
栈用来解决程序的运行问题,程序如何执行,或者说如何处理数据。
方法区则是辅助堆栈的一块永久区(perm),解决堆栈信息产生的先决条件。
1、堆
java堆是和应用程序关系最为密切的内存空间,几乎所有的对象都放在其中,并且java堆是完全的自动化管理,通过垃圾回收机制,垃圾对象会自动清理。
根据垃圾回收机制的不同,java堆可能拥有不同的结构。最为常见的是将堆分为,新生代、老年代。
新生代:存放新生的对象以及年龄不大的对象。
老年代:存放老对象。
新生代:分为eden(伊甸园)、s0和s1(也被成为from、to区,两块的大小是相同的,并且可以互换角色空间)
绝大对数情况,对象首先分配在eden区,在一次新生代回收之后,如果对象还存活,则会进入s0或者s1区域,之后没经过一次新生代回收,如果对象存活则他的年龄加1,当对象达到一定的年龄之后,则进入老年代(tenured区)。
2、java栈
java栈是一块线程私有的内存空间,一个栈一般有3部分组成:局部变量表,操作数栈,帧数据区
局部变量表:用于报错函数的参数及局部变量。
操作数栈:主要保存计算过程的中间结果,同时作为计算过程中变量的临时的存储空间。
帧数据区:除局部变量表和操作数栈外,栈还需要一些数据来支持常量池的解析,这里的帧数据区保存着访问常量池的指针,方便程序访问常量池。另外,当函数函数返回或者出现异常时,虚拟机必须有一个异常处理表,方便发送异常的时候找到异常代码,因此异常数据处理表也是栈数据区域的一部分。
3、java方法区
java方法区和堆一样,方法区为一块线程共享的数据区域。他保存着系统的类信息,不如类的字段、方法、常量池等。方法区大小决定系统可以保存多少类,如果系统定义太多的类,导致方法区溢出。虚拟机同样会抛内存溢出错误。
方法区可以理解为永久区(perm)。
相关推荐
主要包含:JVM概述,内存结构讲解,对象实例化,垃圾回收,类的加载,程序编译,代码的优化,性能监控与调优. JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点:...
一、JVM概述 二、JVM的体系结构 三、JVM运行时数据区 3.1 PC寄存器 3.2 JVM栈 3.3 堆(Heap) 3.4 方法区域 3.5 运行时常量池 3.6本地方法堆栈 四、Jvm堆 五、Jvm调优
jvmkill, 资源耗尽时终止 JVM 概述收费 jvmkill是一个简单的 JVMTI代理,在无法分配内存或者创建线程时强制终止 JVM 。 这对于可靠性目的很重要: 一个 OutOfMemoryError 常常会让JVM处于不一致状态。 终止JVM将允许...
node-jvm, 在纯 node.js 中,java虚拟机 节点 jvm 概述节点 jvm - 纯 node.js 中的jvm示例 javapublic class Main { public static long fib(int n) { if (n <= 1
JVM详细概述与优化大全 从JVM基础知识点出发,再到JVM性能优化,全面详述JVM的实用场景以及优化实践,非常值得收藏
JVM详细概述与优化大全.zip
JVM历史发展和内存回收笔记
JVM详解与优化
incanter, 基于Clojure的R,像统计计算和图形环境用于 JVM 概述从Clojure开始。开始使用 Incanter包含在Clojure项目中。使用独立应用程序管理器使用情况文档和示例构建 Incanter依赖项概述和动机是面向JVM的 ...
1.jvm内存结构及功能概述 2.Jvm Heap 内存结构 3.Jvm 的内存分配
jvm+ 垃圾算法+垃圾回收概述
JVM概述 Java开发技术之(项目工程的日志管理) 数据库连接池原理详解 Java企业级框架之核心技术(反射) Java-Base64算法(创新_防止表单重复提交) 揭开springAOP神秘面纱之动态代理 网络爬虫之JAVA正则表达式
课程前端讲解了JVM的性能监控和调优的概述,对调优的的方法和工具进行讲解学习,让同学们掌握方法,理解知识。课程的中间阶段我们进行了优化思想上的灌输,是整体课程衔接非常重要的部分。而后篇则更加的注重实战和...
目录: 1.JVM体系结构概述 2.堆体系结构概述 3.堆参数调优入门 4.总结
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象...本文主要对java垃圾回收机制以及jvm参数等方面做个综述,也算是自己做开发这几年对这方面的一个总结。
JVM概述从http://2.bp.blogspot.com/ : 线程数java.lang.Thread的实例有关联的本机线程有名称(或命名为Thread#nextNumberInSequence) 具有局部变量,仅给定线程可访问重要的线程生命周期枚举: java.lang....
【JVM系统学习之路系列】 JVM 概述篇 【JVM系统学习之路系列】一篇看懂类加载 【JVM系统学习之路系列】运行时数据区概述和程序计数器 【JVM系统学习之路系列】JAVA 虚拟机栈 【JVM系统学习之路系列】初步了解本地...
一、JVM内存模型概述 ........................ ........................ 二、程序计数器 ........................ ........................ 三、虚拟机栈 ........................ ........................ 四...
有关JVM内存模型的概述,用于对JVM的整体把握从而针对性的学习