如何了解Java虚拟机运行时数据区域
发布时间:2023-04-25 12:45:06 所属栏目:教程 来源:
导读:这期内容当中小编将会给大家带来有关如何理解Java虚拟机运行时数据区域,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
一、程序计数器(Program Counter Register)
当
一、程序计数器(Program Counter Register)
当
|
这期内容当中小编将会给大家带来有关如何理解Java虚拟机运行时数据区域,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 一、程序计数器(Program Counter Register) 当前线程所执行的字节码行号指示器(逻辑) 通过改变计数器的值来选取下一条需要执行的字节码指令 和线程一对一的关系,即“线程私有” 对 Java 方法计数,如果是 Native 方法则计数器值为 Undefined 只是计数,不会发生内存泄漏 二、Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小: java -Xss512M HackTheJava 该区域可能抛出以下异常: 当线程请求的栈深度超过最大值,会抛出 StackOverflowError 异常; 栈进行动态扩展时如果无法申请到足够内存,会抛出 OutOfMemoryError 异常。 局部变量表和操作数栈 局部变量表:包含方法执行过程中的所有变量 操作数栈:入栈、出栈、复制、交换、产生消费变量 public class JVMTest { public static int add(int a ,int b) { int c = 0; c = a + b; return c; } } javap -verbose JVMTest 三、本地方法栈 本地方法栈与 Java 虚拟机栈类似,它们之间的区别只不过是本地方法栈为本地方法服务。 本地方法一般是用其它语言(C、C++ 或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序,对待这些方法需要特别处理。 四、堆 所有对象都在这里分配内存,是垃圾收集的主要区域(”GC 堆”)。 现代的垃圾收集器基本都是采用分代收集算法,其主要的思想是针对不同类型的对象采取不同的垃圾回收算法。可以将堆分成两块: 新生代(Young Generation) 老年代(Old Generation) 堆不需要连续内存,并且可以动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。 可以通过 -xms 和 -Xmx 这两个虚拟机参数来指定一个程序的堆内存大小,第一个参数设置初始值,第二个参数设置最大值。 java -xms1M -Xmx2M HackTheJava (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
