java虚拟机实现原理(java 面试专题一:(Java基础)第二 篇jvm虚拟机)java基础 / Java虚拟机基础...

wufei123 发布于 2024-06-29 阅读(7)

1 java内存模型问题 2 常见内存溢出异常问题 3 垃圾回收面试问题jvm 进程内存逻辑结构

程序计数器:较小的内存空间, 当前线程执行的字节码的行号指 示器;各线程之间独立存储,互 不影响; java栈:线程私有,生命周期和 线程,每个方法在执行的同时都 会创建一个栈帧用于存储局部变 量表,操作数栈,动态链接,方

法出口等信息方法的执行就对 应着栈帧在虚拟机栈中入栈和出 栈的过程;栈里面存放着各种基 本数据类型和对象的引用; 本地方法栈:本地方法栈保存的 是native方法的信息,当一个 JVM创建的线程调用native方法 。

后,JVM不再为其在虚拟机栈中 创建栈帧,JVM只是简单地动态 链接并直接调用native方法; 堆:Java堆是Javaer需要重点 关注的一块区域,因为涉及到 内存的分配(new关键字,反射 等)与回收(回收算法,收集器

等); 方法区:也叫永久区,用于存 储已经被虚拟机加载的类信息 ,常量("zdy","123"等),静态变 量(static变量)等数据 运行时常量池:运行时常量池 是方法区的一部分,用于存放 编译期生成的各种字面量 。

("zdy","123"等)和符号引用 直接内存:不是虚拟机运行 时数据区的一部分,也不是 java虚拟机规范中定义的内 存区域;  如果使用了NIO,这块区域 会被频繁使用,在java堆 内可以用directByteBuffer 。

对象直接引用并操作;  这块内存不受java堆大小 限制,但受本机总内存的 限制,可以通过 MaxDirectMemorySize来 设置(默认与堆内存最大 值一样),所以也会出现 OOM异常;堆和栈的区别是什么?

 功能  以栈帧的方式存储方法调用的过程,并存储方法调用过程中基本数据类型的变 量(int、short、long、byte、float、double、boolean、char等)以及对象的引 用变量,其内存分配在栈上,变量出了作用域就会自动释放;

 而堆内存用来存储Java中的对象无论是成员变量,局部变量,还是类变量, 它们指向的对象都存储在堆内存中;  线程独享还是共享  栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其 。

所属线程中可见,即栈内存可以理解成线程的私有内存  堆内存中的对象对所有线程可见堆内存中的对象可以被所有线程访问堆和栈的区别是什么?  空间大小  栈的内存要远远小于堆内存,栈的深度是有限制的,如果递归没有及时跳出, 。

很可能发生StackOverFlowError问题。  你可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小 ,-Xmx选项可以设置堆的最大值

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻14996