Java虚拟机三 Java堆和栈】的更多相关文章

Java堆是和Java应用程序关系最为紧密的内存空间,几乎所有的对象都存放在堆中.并且堆是完全自动化管理的. 根据垃圾回收机制的不同,Java堆有可能有不同的结构.最为常见的一种就是将整个Java堆分为新生代和老年代.其中,新生代存放新生对象或者年龄不大的对象. 老年代存放老年对象.新生代可能分为eden区.s0区.s1区,s0和s1也被成为from和to区域,他们是两块大小相等,可以互换角色的内存空间. 在多数情况下,对象首先分配在eden区,在一次新生代回收后,如果对象还存活,则会进入s0或…
栈:存放局部变量 堆:存放new出来的对象 方法区:存放类的信息,static变量,常量池(字符串常量) 在堆中,可以说是堆的一部分   创建了一个student类,定义了name属性, id静态变量 和一个study()方法程序运行的时候 java虚拟机会通过类加载器 将类的信息加载到虚拟内存中 存放在方法区里相当于一个类的模板 我们通过这个类的模板来创建对象,这个其实很好理解 我们没有定义类 类加载器加载不到类的信息 不能将这个对象实例化更直白一点,如果凭空new一个对象 编译的时候就会报错…
在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域,所以单独提出一节进行分析. 先来解释一下对象存活?? 什么样的对象是已经死了的对象,须要垃圾回收器进行回收.这个概念至关重要.由于它影响到垃圾回收器对于哪一个对象进行回收.能够从GCRoot訪问到的对象是存活的对象,那么以外的对象就是已死的对象. GCRoot:包含四种 1)Java虚拟机栈中存放…
1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于 嵌入式系统. 移动终端 . 企业服务器 . 大型机等各种场合. 特点:Java 能获得如此广泛的认可,除了它拥有一门 结构严谨.面向对象 的编程语言之外,还有须有不可忽视的有点,主要有如下几点. 它摆脱了硬件平台的束缚,实现了 一次编写,到处运行 的越界问题. 它实现了 热点代码检测 和 运行时编译及优化…
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java Virtual Machine Stack)是线程私有的,它的生命周期与线程相同.虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态连接.方法出口等信息.每一个方法被调用直至执行完毕的过…
问题一:Java与C++区别 1.Java需要运行时环境,包括Java虚拟机以及Java核心类库等. 2.C++无需额外的运行时,通常编译后的代码可以让机器直接读取,即机器码 问题一:Java为什么要在虚拟机运行? 1.一次编译,到处运行. 这里涉及到一个概念:字节码. Java字节码指的是设计一个面向Java特性的虚拟机,通过编译器将Java程序转换成该虚拟机所能识别的指令序列. 为什么是叫字节码呢?原因还是Java 字节码指令的操作码(opcode)被固定为一个字节. 2.托管环境. 虚拟机…
一.Java技术体系 从广义上讲, Clojure. JRuby. Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员. 如果仅从传统意义上来看, Sun官方所定义的Java技术体系包括以下几个组成部分: Java程序设计语言 各种硬件平台上的Java虚拟机 Class文件格式 Java API类库 来自商业机构和开源社区的第三方Java类库 Java程序设计语言. Java虚拟机. Java API类库这三部分统称为JDK( Java Development…
原文链接:http://www.cnblogs.com/laoyangHJ/archive/2011/08/17/gc-Stack.html 深入Java虚拟机:JVM中的Stack和Heap 在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的内存分为两部分:Stack和Heap. Stack(栈)是JVM的内存指令区.Stack管理很简单,pus…
java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉到的内存问题,并且在内存问题出现的时候,也不能很快的定位并解决.因此,了解并掌握Java的内存管理是我们必须要做的是事,也只有这样才能写出更好的程序,更好地优化程序的性能. 概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁…
根据Java虚拟机规范,虚拟机内存中除过程序计数器之外的运行时数据区域都会发生OutOfMemoryError(OOM),本文将通过实际例子验证分析各个数据区域OOM的情况.为了更贴近生产,本次所有例子都是通过调用接口触发,并使用jvisualvm工具监控tomcat内存进行分析. 一.Java堆溢出 Java堆主要用于存储对象和数组实例,只要不断创建对象或者数组,并且保证CG Roots(垃圾收集器对象)到对象之间有可达路径来避免垃圾回收机制清除这些对象,在对象数量到达最大堆的限制后就会产生内…