标签:虚拟 double 数据 运行 分配 log 地址 java 并且
2.1 C、C++内存管理是由开发人员管理,而Java则交给了JVM进行自动管理
2.2 JVM运行时数据区:方法区、堆(运行时线程共享),虚拟机栈、本地方法栈、程序计数器(运行时线程隔离,私有)
2.2.1 程序计数器(Program Counter Register):每一个线程都独有一个程序计数器,并且分配了一块线程私有的小块内存,程序运行时,这个计数器会记录字节码文件运行的行数,当线程切换时,则通过这个行数继续执行下面的操作
2.2.2 虚拟机栈(Java Virtual Machine Stacks):
(1)虚拟机栈是描述Java方法运行的内存模型(栈帧做着分配和调度的事情),一般描述的“栈”就是这个虚拟机栈,还指的是局部变量表,包括各种基本数据类型(boolear,byte,char,short,int,long,float,double),还有引用对象的地址;
(2)StackOverFlowError和OutOfMemerryError都和虚拟机栈有关,前者是当线程请求的栈深度大于虚拟机所允许的深度时的异常,后者是动态扩展虚拟机栈深度之后还是超大了会出现的异常;
2.2.3 本地方法栈(Native Method Stacks):和虚拟机栈高度相似,只不过虚拟机栈用于执行Java方法字节码分配的内存,而本地方法栈是用于本地方法,它和虚拟机栈会抛出同样的异常;关于本地方法:https://www.cnblogs.com/chen-jack/p/7904510.html
2.2.4 堆(Java Heap):存放对象实例,线程共享,垃圾回收(新生代、老年代),内存分配可以通过-Xmx和-Xms来分配(既可扩展也可固定),超出分配的大小会出现OutOfMemeryError异常;
2.2.5 方法区(Method Area):线程共享,存储(常量(final)、静态变量、虚拟机加载的类信息等),永久代(并不准确,只是用永久代去实现方法区,达到回收的效果,Java1.8之后没有永久代了);
2.2.6 运行时常量池(Runtime Constant Pool)
标签:虚拟 double 数据 运行 分配 log 地址 java 并且
原文地址:https://www.cnblogs.com/lcmlyj/p/10049053.html