导航:首页 > 编程语言 > java虚拟机栈

java虚拟机栈

发布时间:2023-01-18 13:37:39

❶ 一个中级java工程师应该掌握哪些知识有什么途径去获取这些知识

首先起码有自己的技术体系结构,并可以持续丰富这个体系结构;主动寻找大型项目的机会,提高自己的综合能力;除了写博客之外,录制一些编程开发的视频,扩展自己的技能;编码能力(点(算法)、线(设计模式、组织代码)、面(框架和学习、理解和应用)、体(操作系统、计算机网络、编译原理等))业务能力(理解需求或问题能力、沟通和协调资源能力、预估和安排计划能力、调研和解决问题能力)

1.接口和抽象类的区别

抽象类里可以有构造方法,而接口内不能有构造方法。抽象类中可以有普通成员变量,而接口中不能有普通成员变量。抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只有public和默认类型。抽象类中可以包含静态方法,接口内不能包含静态方法。抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。一个类可以实现多个接口,但只能继承一个抽象类。接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。

2.Java虚拟机的运行时数据区有几块?线程私有和线程共享区域有哪些?

程序计数器:线程私有,当前县城执行的字节码的行号指示器。虚拟机栈:线程私有,存放基本数据类型、对象引用和returnAddress类型。本地方法栈:为虚拟机使用到的Native方法服务。Java堆:线程共享,存放对象的实例,也是GC回收器管理的主要区域。方法区:线程共享,存放已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。运行时常量池:方法区的一部分,存放编译期生成的各种字面量和符号引用。直接内存:不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,容易引起OOM异常,NIO会调用,不受Java堆大小的限制。


❷ 简述java内存分配与回收策率有什么用

引言:大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。老年代GC(Major GC / Full GC):指发生在老年代的GC,出现了Major GC,经常会伴有至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。


三、总结

可达性分析:以名为“GC根”的对象为起点,从这些节点向下搜索。当一个对象不能连接到“垃圾回收根”时,意味着它是可回收的。

❸ 一、Android 虚拟机内存模型

jvm运行时数据区域解析
刘望舒的BLOG
虚拟机的内存模型

1.程序计数器: 确定程序指令执行顺序的,是唯一一块不会发生内存溢出的区域

2. Java虚拟机栈

**它也是线程私有的,负责存储方法内的局部变量,方法出口等。每执行一个方法都相当于压如一个栈帧,方法执行完比后这个栈帧从Java虚拟机栈中弹出。

3.本地方法区
负责管理虚拟机用到的 C 的方法。

4.堆内存区域
Java堆是一块被所有线程共享的区域,用来存放对象的实例。它不需要物理上连续,只需要逻辑上连续就可以。

5.方法区
方法区是被所有线程共享的的内存区域,用来存放已经被Java虚拟机加载的类的结构信息:运行时常量池,字段,方法信息,静态变量等数据。

class文件的内容

❹ 如何理解Java虚拟机栈

堆是堆(heap),栈是栈(stack),堆栈是栈。

栈中分配的是基本类型和自定义对象的引用。

堆中分配的是对象,也就是new出来的东西。 被所有线程共享。

方法区/静态区 存放的是类信息和static变量、常量。 被所有线程共享。

也可以这么理解:堆是用来存放对象的,栈是用来运行程序的。

堆:java的垃圾回收器会自动的回收这些不用的数据。缺点是由于要动态的分配内存,存储效率会比较的慢。

栈:栈的优势是存取效率比较快,仅次于寄存器,栈数据可以共享。但缺点是栈中的数据大小和生存期的固定的,缺乏灵活性。

一般每个方法的调用都会独立有一个栈来保存对象的引用变量,在方法返回后,栈会清空,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

以32位地址操作系统为例,一个进程可拥有的虚拟内存地址范围为0-2^32。分为两部分,一部分留给kernel使用(kernel virtual memory),剩下的是进程本身使用, 即图中的process virtual memory。

一个程序本质上都是由bss段、data段、text段三个组成的

bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。

在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。

text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。

❺ 看到书上说java栈和虚拟机栈,这两者有什么关系

栈可以看做是一个容器,专门用来存放东西的容器,这个容器有个特点都是先进后出的内。
java栈应该叫做栈帧,容其实就是一个方法的信息,里面有局部变量表、操作数栈、动态连接、返回地址、附加信息
虚拟机栈就是一个存放栈帧的栈。

❻ 栈帧java中用什么表示

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法返回地址和一些额外的附加信息。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈 都已经完全确定了,并且写入到了方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体虚拟机的实现。

阅读全文

与java虚拟机栈相关的资料

热点内容
win8怎么显示文件格式 浏览:547
文件服务器中毒 浏览:721
如何修改网站访问次数 浏览:518
mdfldf是什么文件 浏览:569
文件在桌面怎么删除干净 浏览:439
马兰士67cd机版本 浏览:542
javaweb爬虫程序 浏览:537
word中千位分隔符 浏览:392
迷你编程七天任务的地图怎么过 浏览:844
word2003格式不对 浏览:86
百度云怎么编辑文件在哪里 浏览:304
起名app数据哪里来的 浏览:888
微信怎么去泡妞 浏览:52
百度广告html代码 浏览:244
qq浏览器转换完成后的文件在哪里 浏览:623
jsp中的session 浏览:621
压缩完了文件去哪里找 浏览:380
武装突袭3浩方联机版本 浏览:674
网络机顶盒移动网络 浏览:391
iphone手机百度云怎么保存到qq 浏览:148

友情链接