速记-JVM划分

JVM是Java虚拟机的缩写,是Java语言的核心部分。JVM主要负责将Java源代码编译成字节码,然后执行这些字节码。在JVM中,内存主要分为以下几个区域:

程序计数器:是一块较小的内存区域,用于线程的指令计数器,记录线程执行的位置和执行状态,是线程私有的。

虚拟机栈:每个线程在执行时都有一个私有的栈,用于存储栈帧,即方法调用和执行时的状态信息。

本地方法栈:与虚拟机栈类似,用于为本地方法服务。

堆:是JVM中最大的一块内存区域,是被所有线程共享的内存区域,用于存放对象实例。

方法区:用于存放已加载的类信息、常量、静态变量等数据。

在JVM中,垃圾回收主要针对堆内存,JVM中的垃圾回收算法主要有标记-清除算法、复制算法、标记-整理算法等。新生代和老年代是为了更好地进行垃圾回收而设立的两个不同的区域。

新生代是存放新生成的对象的区域,通常将其分为一个较大的Eden空间和两个较小的Survivor空间,比例为8:1:1。当Eden空间满时,就会触发一次Minor GC,将Eden和其中一个Survivor中的存活对象复制到另一个Survivor空间,然后清空原空间。当某个Survivor空间被填满时,也会触发一次Minor GC。老年代则是存放较大的长期存活的对象,需要采用更加高效的垃圾回收算法,如标记-整理算法和标记-清除算法等。

至于为什么新生代比例是8:1:1,主要是因为新生成的对象通常比较小,大部分都是临时对象,而且有很多对象是很快就被回收的。所以将新生代分为较大的Eden和较小的Survivor空间,可以提高垃圾回收的效率。
全部评论

相关推荐

头像 会员标识
07-01 15:27
已编辑
眉山职业技术学院 Java
自我介绍 (一面没问项目)询问学习了多久的java?1.Hashmap的数据结果组成?2.Hashmap是线程安全的吗?3.CurrentHashmap是线程安全的吗?4.CAS操作5.如何解决hash冲突?6.JMM的执行顺序原理7.volatile关键字如何保证有序的?当一个线程修改了volatile变量的值,其他线程可以见到吗?8.synchronized和ReentrantLock的区别?其使用场景和实现原理?9.讲一下用户输入网址到服务器响应完再返回前端给用户看见的整个流程?10.tls如何加密的?11.TCP的三次握手需要传递那些包?12.4次挥手能不能是3次?为什么?13.TCP/IP有哪几层?每一层分别有哪些协议?报文段的最大限制是多少字节?这个主要是受什么限制导致的?14.描述一下TCP流量控制的滑动窗口机制?15.双亲委派机制原理?16.使用过线程池没? 讲一下线程池有哪些核心参数?  会根据什么场景去设置核心线程数和最大线程数?17.如果一台机器是4核 核心线程数为啥设置成4而不是5?18.redis用过没? redis数据类型有几种?分别用于什么场景?redis宕机后有什么措施?20.有没有学习过大模型的知识(简历上有)问什么是向量数据库,比较向量相似的原理(cos余弦相似度?答的不太对)手撕   在本地  手写单列模式  (双重检验锁试) 然后让写一个颜色工厂实例 (没写出来,讲了一下思路)反问 部门业务  对自己的建议
查看23道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务