Java程序运行的内存分配】的更多相关文章

java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下   一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈.进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享.Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会初始…
转自:http://www.tuicool.com/articles/uU77v2 一.  基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈.进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享.Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会初始化这个对象中变量.虽然J…
Java的内存分配 A:栈 存储局部变量 B:堆 存储所有new出来的 C:方法区(程序代码及方法相关) D:本地方法区(系统相关) E:寄存器(CPU使用) 注意: a:局部变量 在方法定义中或者方法声明上定义的变量. b:栈内存和堆内存的区别 栈:数据使用完毕,就消失. 堆:每一个new出来的东西,且都有地址 每一个变量都有默认值 byte,short,int,long 0 float,double 0.0 char '\u0000' boolean false 引用类型 null 数据使用…
1.Java程序跨平台运行的原因 主要原因是:各种平台的JVM和字节码文件 Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在运行的过程中 将字节码指令转换为具体平台的机器指令.JVM运行在用户态,操作系统将JVM看作是一个特殊的软件,JVM启动的时候,OS给其划分 一定的内存供其运行字节码文件.存在基于JVM的其他编程语言的原因:对应特定语言的编译器可以将源码翻译成字节码文件,这个字节码可以被JVM识别并执行. 注意:执…
作为 java 程序员,都应该知道 Java 程序运行在 JVM(Java Virtual Machine,Java 虚拟机)上,可以把 JVM 理解成 Java 程序和操作系统之间的桥梁,JVM 实现了 Java 的平台无关性,由此可见 JVM 的重要性.所以在学习 Java 内存分配原理的时候一定要牢记这一切都是在 JVM 中进行的,JVM 是内存分配原理的基础与前提. Java 程序在运行的过程中涉及到以下内存区域: 栈 存放局部变量,可保存基本数据类型的值,还可以保存引用类型变量,即对象…
很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的Java程序将会占用多大的内存需要先了解有哪些因素会影响到内存的占用.这些因素包括: 对象(Objects) 类(Classes) 线程(Theads) 本地数据结构(Native data structures) 本地代码(Native code) 每个因素对内存占用的影响又会随着应用程序.运行环境…
Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”. Java垃圾回收(Garbage Collection):不用使用的内存空间应该回收:在C/C++等语言中,由程序员负责回收无用的内存:Java语言消除了程序员回收无用内存的职 责,它提供一种系统级线程跟踪存贮空间的分配情况,并在JVM空闲的时候,检…
这里的Java程序运行过程,是指我们编译好代码之后,在命令行开始执行java xxx命令,到java程序开始执行起来的这一过程,我们称其为运行时. 第一步,操作系统解析我们输入的java xxx命令,根据PATH中所配置的jrd路径找的其bin目录下的java.exe程序(这个程序是用c语言写的,源码在jdk的src文件中的laucher目录下),然后再初始化一些java参数(比如classpath.虚拟机参数等). 第二步,java.exe程序根据上一步读入的虚拟机参数,分配内存并启动jre/…
Java虚拟机在执行java程序时会把内存划分为以下几个不同的数据区域: java虚拟机内存划分(运行时)1.线程私有的: 程序计数器(Program Counter Register):可以看作当前线程所执行的字节码的行号指示器.java多线程中一个时刻,一个处理器都只会执行一条线程中的指令,在线程轮流切换的过程中,每个线程都有自己的程序计数器,互不影响,以便线程切换恢复到正确的执行位置.唯一不会发生OutOfMemoryError的区域.如果执行的是java方法,计数器值为虚拟机字节码指令地…
Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤. 一.高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型两种 . 1.1 编译型语言 编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译"成可被该平 台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译 CCompile ) . 编译生成的可执行性程序…