- 浏览: 253642 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
根据《java虚拟机规范》的规定,Java虚拟机运行时所管理的内存将会包括以下几个运行时数据区域:
1、程序计数器:顾名思义,其作用是作为当前线程所执行的字节码的行号指示器,它是线程私有的。
2、java虚拟机栈:它描述的是Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,每个方法的执行过程就对应着一个栈帧在虚拟机栈中从出栈到入栈的过程,它也是线程私有的。
3、本地方法栈:其与虚拟机栈类似,其区别在于虚拟机栈为执行JAVA方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务;需要注意的是,虚拟机规范中并没有对如何实现本地方法栈作具体规定,具体的虚拟机可以自由实现它;有的虚拟机直接把虚拟机栈跟本地方法栈合二为一,如Sun HotSpot虚拟机。
4、Java堆:这是大多数比较熟悉的内存区域,对于大多数应用程序来说,java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块,它是被JVM中的所有线程共享的一块内存区域,在JVM启动时就创建;此区域的唯一目的就是存放对象实例,几乎所有的对象实例都存放在这一区域,但是随着JIT编译器的发展与逃逸分析技术的慢慢成熟,栈上分配、标量替换优化技术将会导致一些变化,所有对象实例都存放在这一区域也就不那么绝对了,目前我们仍认为该区域是对象实例存放的主要区域;它同时也是JAVA垃圾收集器管理的主要区域,故有时JAVA堆也称为GC堆。
JAVA堆的分类:从内存回收的角度看,java堆可细分为:新生代、老年代,再细一点还可划分为Eden空间、From Survivor空间、To Survivor空间等。
5、方法区:其与java堆一样,是JVM中所有线程共享的内存区域,它用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。很明显的,它与Java堆还是有明显区别的。在HotSpot虚拟机上,方法区有个别名叫“永久代(Permanent Generation Space 简称 PermGen Space)”,因为在Hot Spot虚拟机的GC分代收集实现中把方法区也纳入收集目标对象,只是该区域中的对象实例在JVM的生命周期内几乎都不会被回收,故称“永久代”。
对于其他虚拟机如BEA JRockit 、IBM J9 则不存在“永久代”这一叫法。
6、运行时常量池(Run time Constant Pool):它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一些常量信息,如各种字面量、符号引用等,这部分常量内容将在类加载后存放到方法区的运行时常量池中。
7、直接内存(Direct Memory):它并不是JVM运行时数据区的一部分,也不是JVM规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError异常出现。在使用NIO(New Input/Output)类时会接触到这一内存区域。
1、程序计数器:顾名思义,其作用是作为当前线程所执行的字节码的行号指示器,它是线程私有的。
2、java虚拟机栈:它描述的是Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息,每个方法的执行过程就对应着一个栈帧在虚拟机栈中从出栈到入栈的过程,它也是线程私有的。
3、本地方法栈:其与虚拟机栈类似,其区别在于虚拟机栈为执行JAVA方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务;需要注意的是,虚拟机规范中并没有对如何实现本地方法栈作具体规定,具体的虚拟机可以自由实现它;有的虚拟机直接把虚拟机栈跟本地方法栈合二为一,如Sun HotSpot虚拟机。
4、Java堆:这是大多数比较熟悉的内存区域,对于大多数应用程序来说,java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块,它是被JVM中的所有线程共享的一块内存区域,在JVM启动时就创建;此区域的唯一目的就是存放对象实例,几乎所有的对象实例都存放在这一区域,但是随着JIT编译器的发展与逃逸分析技术的慢慢成熟,栈上分配、标量替换优化技术将会导致一些变化,所有对象实例都存放在这一区域也就不那么绝对了,目前我们仍认为该区域是对象实例存放的主要区域;它同时也是JAVA垃圾收集器管理的主要区域,故有时JAVA堆也称为GC堆。
JAVA堆的分类:从内存回收的角度看,java堆可细分为:新生代、老年代,再细一点还可划分为Eden空间、From Survivor空间、To Survivor空间等。
5、方法区:其与java堆一样,是JVM中所有线程共享的内存区域,它用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。很明显的,它与Java堆还是有明显区别的。在HotSpot虚拟机上,方法区有个别名叫“永久代(Permanent Generation Space 简称 PermGen Space)”,因为在Hot Spot虚拟机的GC分代收集实现中把方法区也纳入收集目标对象,只是该区域中的对象实例在JVM的生命周期内几乎都不会被回收,故称“永久代”。
对于其他虚拟机如BEA JRockit 、IBM J9 则不存在“永久代”这一叫法。
6、运行时常量池(Run time Constant Pool):它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一些常量信息,如各种字面量、符号引用等,这部分常量内容将在类加载后存放到方法区的运行时常量池中。
7、直接内存(Direct Memory):它并不是JVM运行时数据区的一部分,也不是JVM规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError异常出现。在使用NIO(New Input/Output)类时会接触到这一内存区域。
发表评论
-
servletcontext 的获取
2013-05-12 20:10 477容器在初始化servlet时,会为其注入servletconf ... -
取得下一个sequence。 getNextInterval
2013-03-15 11:47 9391. 初始sequence值放置于数据库。 2. 启动时产 ... -
java 脚本,编译与注解处理
2013-02-05 10:04 8511.java中支持脚本调用 通过脚本引擎来执行。 Obj ... -
java 安全管理器
2013-02-04 11:24 8301.在java语言实现中,扩展和系统加载器都是java实现的, ... -
RMI 底层实现
2013-01-28 16:43 9151. server端代码: Registry regist ... -
Java获取当前路径
2013-01-22 18:12 896无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 ... -
java1.5 新特性
2013-01-10 16:50 764"JDK1.5"的一个重要主题就是通过新增 ... -
import static静态导入
2013-01-10 12:12 848import static静态导入是JDK1.5中的新特性。一 ... -
类加载器加载的类的访问权限问题
2013-01-04 15:34 10521.父加载器加载的类不能访问子加载器加载的类。 (向下可见性) ... -
java 内部类总结
2012-12-28 12:31 745主要从分类和使用情境来看 1. 普通内部类。 位置: 在 ... -
java构造函数和静态变量的执行顺序
2012-12-18 11:18 1034java初始化顺序 1在new B一个实例时首先要进行类的装载 ... -
Java多线程之Condition接口的实现
2012-11-26 17:03 937在实际中一个lock可产生多个Condition对象。个人认为 ... -
java线程同步原理(lock,synchronized)
2012-11-26 14:26 998一。 java线程同步原理 java会为每个object对象分 ... -
总结下java中abstract,interface,final,static,加深理解
2012-11-16 17:16 888一,抽象类:abstract 1,只要有一个或一个 ... -
为什么interface的变量必须是public final static的
2012-11-16 17:15 1017public 感觉是因为Java对接口的要求是所有类都可以实现 ... -
stack在排序的应用
2012-10-22 17:04 718对于list, 可用Collections的静态方法 Coll ... -
随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
2012-09-25 14:59 1575RandomAccessFile RandomAccessF ... -
Java 服务器端支持断点续传的源代码
2012-09-25 14:44 4037Java 服务器端支持断点续传的源代码【支持快车、迅雷】(仅支 ... -
new File(String parent,String child)
2012-08-22 23:00 1169//user_dir:E:\workspace\javates ... -
System.getProperty
2012-08-22 22:07 914System.getProperty(String name) ...
相关推荐
Java虚拟机内存管理总结 Java虚拟机(JVM)中的内存管理是指Java语言中对象的分配和释放问题。Java中的内存管理可以分为两部分:对象的分配和释放。 对象的分配是由程序完成的,程序员需要通过关键字new为每个对象...
深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序...Java 虚拟机也提供了自动内存管理、垃圾收集、多线程支持等功能,提高了 Java 程序的可靠性和性能。
### JAVA虚拟机的内存管理详解 #### 一、引言 在Java 2平台的强大支持下,J2SE能够自动管理内存,这大大减轻了开发者的负担,让他们不必再进行复杂的显式内存管理工作。本文档旨在对Sun J2SE 5.0版本中的Java ...
Java虚拟机(JVM)内存模型是Java编程语言的核心组成部分,它定义了程序运行时的数据区域和内存管理方式。深入理解这一模型对于优化Java应用程序性能、避免内存泄漏以及理解线程安全至关重要。以下是对Java虚拟机...
Java虚拟机还负责垃圾回收(Garbage Collection),即自动管理内存,释放不再使用的对象占用的内存,减轻程序员的负担。垃圾回收机制是Java语言与生俱来的特性之一,与C/C++等语言相比,Java的内存管理更简单、更...
### Java 虚拟机JVM内存模型知识点 #### 1. JVM概述 ##### 1.1 Java的特性与JVM的应用 Java语言的特性包括跨平台性、面向对象、安全性等。JVM是Java程序能够跨平台运行的关键,它负责将Java源代码转换成与平台无关...
类加载是Java虚拟机启动时或运行时动态加载类的过程。它由类加载器系统执行,通常分为引导类加载器、扩展类加载器和应用程序类加载器。加载过程包括加载、验证、准备、解析和初始化五个阶段,确保加载的类符合规范且...
根据提供的文件标题、描述、标签以及部分内容,我们可以深入探讨与Java虚拟机(JVM)相关的多个核心知识点。以下是对这些主题的详细阐述: ### Java虚拟机(JVM)概述 Java虚拟机(JVM)是一种用于执行Java字节码的...
Java虚拟机的内部结构包括类装载器、运行时数据区、执行引擎、本地方法接口和本地库。其中,类装载器负责加载类文件,运行时数据区存储线程的工作数据,执行引擎解析并执行字节码,本地方法接口允许JVM调用非Java...
Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...
《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java程序在编写完成后,会被编译成字节码(.class文件),这些字节码可以在任何装有JVM的系统上运行,实现了“一次编写,到处...
### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...
在Java虚拟机运行过程中,我们可能需要使用各种命令工具来监控和诊断可能出现的问题。以下是一些常用的JVM命令工具及其知识点。 1. jps命令 jps(JVM Process Status Tool)命令用于列出正在运行的Java虚拟机进程...
它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者提升程序的运行效率和稳定性。 1. **Java虚拟机概述**:Java虚拟机是Java平台的核心组件,它...
使用 JAVA 虚拟机解决内存管理问题 JAVA 虚拟机是运行在主操作系统顶层的软件层,使通讯程序、Java 应用程序与任何底层硬件的改变互不相关。虚拟机技术是 Java 成功地移植到嵌入式系统的关键。Java 虚拟机是一种...