- 博客(10)
- 收藏
- 关注
原创 运行时数据区——堆区
一个JVM只有一个堆内存,也是Java内存管理的核心区域。Java堆区在JVM启动的时候被创建,其大小也确认。是JVM管理的最大一块内存空间。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的。所有线程共享堆空间,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。
2024-07-31 11:31:55 1074
原创 运行时数据区——本地方法栈
并不是所有的JVM都支持本地方法,因为JVM规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构。当某个线程调用一个本地方法时,它就进入了一个全新的并且不在受虚拟机限制的世界。它和虚拟机拥有同样的权限。如果JVM产品不打算支持Native方法,也可以无需实现本地方法栈。在HotSpot JVM中,直接将本地方法栈和虚拟机栈合二为一。本地方法栈用来管理本地方法的调用,线程私有。它甚至可以直接使用本地处理器中的寄存器;直接从本地内存的堆中分配任意数量的内存。本地方法可以通过本地方法接口。
2024-07-31 11:30:25 318
原创 运行时数据区(PC寄存器)
很小的一块内存空间,几乎可以忽略不计,也是运行速度最快的存储区域;线程私有,与线程的声明周期一直;任何时间一个程序只有一个方法在执行,即当前方法。程序计数器会存储当前线程正在执行的java方法的jvm指令地址;或者,如果是在执行native方法,则是未指定值(undefined);唯一一个在jvm中没有规定oom问题和没有gc的区域。
2024-07-31 11:28:12 348
原创 运行时数据区——方法区
而Java中的字节码需要数据支持,通常这种数据会很大以至于不能直接存到字节码里,换另一种方式,可以存到常量池,这个字节码包含了指向常量池的引用。默认值则根据操作系统区分,Windows下,-XX: MetaspaceSize默认为21M,-XX: MaxMetaspcaeSize的值是-1,表示没有限制。因为永久代的回收效率很低,在full gc的时候才会触发,而开发中会有大量的字符串被创建,回收效率低,导致永久代空间不足,放到堆中,能及时回收内存。只要常量池中的常量没有被引用,就会被回收。
2024-07-31 11:25:18 238
原创 双亲委派机制
如果一个类加载器收到了类加载的请求,它并不会自己去加载,而是先交给父类的加载器去加载;如果父类加载器还有父类加载器,那么继续向上委托,依次递归请求最终将到达顶层的启动类加载器;如果父类加载器可以完成类加载器任务,就成功返回,如果父类加载器无法完成此加载任务,子加载器才会尝试加载。
2024-07-31 11:20:07 322
原创 类加载器介绍
类加载子系统只负责从文件系统中加载class文件,class文件在文件开头有特定的文件标识;ClassLoader主要负责class文件的加载,是否运行则由Execution Engine决定;加载的类信息放在一块为方法区的内存空间,其还会存放运行时常量池信息,可能还包括字符串字面量和数字常量。
2024-07-31 11:04:36 786
原创 Elasticsearch多值字段,字段内存储string字符串,对值进行去重聚合
Elasticsearch多值字段,字段内存储string字符串,对值进行去重聚合。
2024-07-31 10:48:59 395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人