了解一下JVM和GC工作机制
2024-09-03 02:54:41
题外话:很久没有写博客了,事情颇多,今天空闲下来,学习一下顺便写一下自己的了解,机会总是留给有准备的人,所以平常一定要注意知识的巩固和积累。知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你?
一、JVM结构
1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。
2.执行引擎:负责执行class文件中包含的字节码指令(执行引擎的工作机制,这里也不细说了,这里主要介绍JVM结构);
3.内存区(也叫运行时数据区):是在JVM运行的时候操作所分配的内存区。运行时内存区主要可以划分为5个区域,如图
- 方法区(Method Area):用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆),所以大家不要搞混淆了。方法区还包含一个运行时常量池。
- java堆(Heap):存储java实例或者对象的地方。这块是GC的主要区域(后面解释)。从存储的内容我们可以很容易知道,方法区和堆是被所有java线程共享的。
- java栈(Stack):java栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的java栈。在这个java栈中又会包含多个栈帧,每运行一个方法就创建一个栈帧,用于存储局部变量表、操作栈、方法返回值等。每一个方法从调用直至执行完成的过程,就对应一个栈帧在java栈中入栈到出栈的过程。所以java栈是现成私有的。
- 程序计数器(PC Register):用于保存当前线程执行的内存地址。由于JVM程序是多线程执行的(线程轮流切换),所以为了保证线程切换回来后,还能恢复到原先状态,就需要一个独立的计数器,记录之前中断的地方,可见程序计数器也是线程私有的。
- 本地方法栈(Native Method Stack):和java栈的作用差不多,只不过是为JVM使用到的native方法服务的。
最新文章
- springmvc之格式化要显示的小数或者日期。
- amgular $q用法
- Jquery-easyUI-datagrid参数之 queryParams
- Core Java Volume I — 3.5. Operators
- c++ 设计模式4 (Strategy)
- 过滤器(Filter)
- Cracking the coding interview--Q1.5
- PLSQL笔记
- 使用RouteDebugger对MVC路由进行调试
- centos编译内核:no space left on device 解
- Webpack模块加载器
- Java笔记(二十) 注解
- 全网最详细的Centos7系统里安装Openresty(图文详解)
- ubuntu安装和分区方案
- docker 下运行 postgresql 的命令
- 测试那些事儿—web测试方法之输入框
- java中HashMap的基本方法使用
- docker in all
- 1004: 不明飞行物(ufo)
- Loadrunner集合点Rendezvous知识