JVM
文章平均质量分 85
分享JVM底层知识
小mei
211研究生在读
展开
-
JAVA只能用new创建对象吗?
首先在需要创建对象时,JVM会检查这个指令的参数能不能定位到常量池里的符号引用,看其所代表的类是不是已经被加载了,如果没有,则执行类加载过程,具体可以看这篇博客。内存规整:内存分为两块,一块用过,一块没有,中间使用一个指针作为分界点,这个时候分配内存只需要移动指针即可。内存不规整:JVM会维护一个列表,记录可用的内存区域,在分配时找到足够的内存区域分给对象实例。另一种就是利用TLAB区域,这块是线程私有的区域,所有是线程安全的。设置对象头信息,包括执行类信息的指针,哈希码,GC分代年龄,锁信息等等。原创 2024-06-20 16:44:08 · 724 阅读 · 0 评论 -
JVM堆区域的相关知识
这里需要注意,在Eden区域还有一小块区域叫做TLAB,这块区域是线程私有,因为对象分配并不是线程安全的,需要枷锁,所以这块区域用于提高对象分配效率,但是分配对象大于这块区域或者这块区域已经满了,仍然需要加锁分配对象内存。对于Java应用程序来说,Java堆是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块区域,在虚拟机启动的时候创建,几乎所有的对象实例都在这块分配。:这块是堆内存区域占用空间最大的一块。新生代的区域,新建的对象实例大多都分配在这里。提到堆区域,那就不得不提到垃圾回收了。原创 2024-06-19 19:00:50 · 1375 阅读 · 0 评论 -
一文看懂JVM类加载过程
类加载机制:JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为类加载机制。这个阶段的目的是确保加载的类的字节码是合法的、符合JVM规范的,并且不会危害JVM的安全。编译器的收集顺序是由语句在源文件出现的顺序决定的,静态语句块只能访问到定义在静态语句之前的变量,定义在它之后的变量可以访问,可以赋值但是不可以访问。加载通过一个类的全限定名获取类的二进制流,将字节流的的静态储存转化为方法区的运行时数据结构。原创 2024-06-16 16:51:47 · 1536 阅读 · 0 评论