平时写的Bug的存储位置
ug,我们每天都在用Java实现着各种需求,我们实现的Java程序每天都运行在每个机器的虚拟机上,但是你了解你写的代码的具体存储位置吗 说实话,这个东西,在我刚开始学Java的时候,我听到JVM虚拟机这个名词的时候,我的感觉是这个样子的(惭愧 你们肯定也会有些疑问吧,平时写的代码每一部分都是存储在哪里的?是的,没错,我的内心就像拖着下巴的那位,除了,模样,emmm... 虽然现在也不是多么的精通,但是比之前好太多了,不是涉及很底层的东西也算是了解一些,当然真要是问我各种涉及细节,毫不谦虚的说,以我的水平,我可能只会阿巴阿巴(逃 如果大家对更深入的JVM感兴趣,可以和JVM大神R大这种多去沟通沟通 是的,没错,其实我这个文章算是扫盲文章,但是在扫盲文章的基础上说的更细一点,更多一点,我也会给大家抛出一些面试官爱问的问题,并且帮大家解答,所以大家请尽情读下去,肯定会让你有所收获 大家觉得不错的点个关注,大家一起探讨、一起学习、一起进步 JVM内存结构要分为堆、虚拟机栈、本地方法栈、方法区、程序计数器等,堆是虚拟机内存占据最大的一部分,堆的目的就是盛放大量的对象实例的;虚拟机栈对应的是方法的执行过程,本地方法栈是用来调用本地方法的执行过程;方法区就是用来存储存储类信息、常量、静态变量的数据,是线程共享的数据;程序计数器,就是存储着线程下一条将要执行的指令 每个区域都有其特定的功能,就像是一个企业,一个工作室,每个人发挥着自己的长处,各司其职 走着吧,各位养鱼仔(我是鱼),一起来瞧瞧每一部分的具体的细节以及面试官爱问的问题 虚拟机堆 Java堆是垃圾收集器管理的主要地方,因此很多的时候也被称为GC堆,Java堆还可以分为年轻代和老年代,年轻代又可以分为Eden空间、From Survivor空间、To Survivor空间,默认是8:1:1的比例 根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就像我们的磁盘空间一样 在实现时,既可以实现成固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过-Xmx和-Xms控制);如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。 打断一下,Java堆的区域都是线程共享的吗? 当你听到这个问题的时候,你首先想到的是什么呢? let me tell you,面试官其实问这个的时候就是在看你对堆的了解程度,你只知道是用来放对象实例的,那面试官对你表现觉得不算非常满意;但是如果你知道TLAB,并且知道它的原理和问题,那面试官就会觉得:这小伙子不一般,我得再多深入了解了解,可以考虑当我的好助手
首先,你得肯定回答,没错,堆是全局共享的,但是会存在一些问题, (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |