ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文了解JVM(中) [打印本页]

作者: 吴旭华    时间: 2024-6-4 22:01
标题: 一文了解JVM(中)
HotSpot 虚拟机对象探秘

对象的创建

Header表明使用 new 关键字调用了构造函数使用 Class 的 newInstance 方法调用了构造函数使用 Constructor 类的newInstance 方法调用了构造函数使用 clone 方法没有调用构造函数使用反序列化没有调用构造函数说到对象的创建,首先让我们看看 Java 中提供的几种对象创建方式:
下面是对象创建的主要流程:

虚拟机碰到一条 new 指令时,先查抄常量池是否已经加载相应的类,假如没有,必须先执行相
应的类加载。类加载通过后,接下来分配内存。若 Java 堆中内存是绝对规整的,使用“指针碰
撞“方式分配内存;假如不是规整的,就从空闲列表中分配,叫做”空闲列表“方式。划分内存
时还需要考虑一个问题--并发,也有两种方式: CAS 同步处置惩罚,或者当地线程分配缓冲(Thread
LocalAllocation Buffer, TLAB)。然后内存空间初始化操作,接着是做一些必要的对象设置(元信
息、哈希码…),最后执行  方法。
为对象分配内存

类加载完成后,接着会在 Java 堆中划分一块内存分配给对象。内存分配根据Java 堆是否规整,
有两种方式:
选择哪种分配方式是由 Java 堆是否规整来决定的,而 Java 堆是否规整又由所接纳的垃圾收集器
是否带有压缩整理功能决定。

处置惩罚并发安全问题

对象的创建在虚拟机中是一个非常频仍的举动,哪怕只是修改一个指针所指向的位置,在并发情
况下也是不安全的,可能出现正在给对象 A 分配内存,指针还没来得及修改,对象 B 又同时使
用了原来的指针来分配内存的情况。解决这个问题有两种方案:

对象的访问定位

Java 步伐需要通过 JVM 栈上的引用访问堆中的具体对象。对象的访问方式取决于 JVM 虚拟机
的实现。目前主流的访问方式有** 句柄** 和 直接指针 两种方式。
句柄访问

Java 堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地点,而句柄中包含了对象实例数据对象类型数据各自的具体地点信息,具体构造如下图所示:

上风:引用中存储的是稳定的句柄地点,在对象被移动(垃圾收集时移动对象是非常普遍
的举动)时只会改变句柄中实例数据指针,而引用本身不需要修改。
直接指针

假如使用直接指针访问,引用 中存储的直接就是对象地点,那么 Java 堆对象内部的布局中就必
须考虑如何放置访问类型数据的相干信息。

上风:速率更,节省了一次指针定位的时间开销。由于对象的访问在 Java 中非常频仍,因此
这类开销集腋成裘后也是非常可观的执行成本。 HotSpot 中接纳的就是这种方式。
64 位 JVM 中,int 的长度是多数?

Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位
和 64 位 的  Java 虚拟机中,int 类型的长度是相同的。
32 位和 64 位的 JVM,int 类型变量的长度是多数?

32 位和 64 位的  JVM 中,int 类型变量的长度是相同的,都是 32 位或者4 个字节。
怎样通过 Java 步伐来判定 JVM 是 32 位 照旧 64 位?

你可以查抄某些体系属性如 sun.arch.data.model 或 os.arch 来获取该信息。
32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?

理论上说上 32 位的 JVM 堆内存可以到达 2^32, 即 4GB,但实际上会比这个小许多。不同操
作体系之间不同,如 Windows 体系大约 1.5GB,Solaris大约 3GB。64 位 JVM 允许指定最大
的堆内存,理论上可以达到 2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到
100GB。乃至有的JVM,如 Azul,堆内存到 1000G 都是可能的。
JRE、JDK、JVM 及 JIT 之间有什么不同?

内存溢出非常

Java 会存在内存泄漏吗?

内存泄漏是指不再被使用的对象或者变量不停被占据在内存中。理论上来说,**Java **是有 GC
垃圾回收机制的,也就是说,不再被使用的对象,会被 GC 自动回收掉,自动从内存中扫除。
但是,即使这样,Java 也照旧存在着内存泄漏的情况,java 导致内存泄露的原因很明确:长
生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不
再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是** java** 中内存泄露
的发生场景。
什么情况下会发生栈内存溢出


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4