java虚拟机
乖怪查理
BOW !!!
展开
-
【VisualVM远程监控Linux Java进程】
(4)启动jstatd:jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true & 这时执行jps命令就可以看到jstatd线程已经启动了。(5)打开visualVM,选择远程连接,选择jstatd模式,输入服务器ip点确认即可在左侧看到Java进程。(3)给文件777权限:chmod 777 jstatd.all.policy。原创 2024-05-30 12:24:38 · 137 阅读 · 1 评论 -
【执行引擎】
但编译未本地代码后,执行效率高。所以,当Java虚拟机启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译编译完成后再执行,这样可以省去许多不必要的编译时间,随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。热点代码:一个被多次调用的方法,或者是一个方法体内部的循环次数较多的循环体都可以称之为“热点代码”。在Java虚拟机运行时,解释器和即时编译器能够互相协作,各自取长补短,尽力去选择最合适的方式来权衡编译本地代码的时间和直接解释执行代码的时间。原创 2024-03-28 21:39:02 · 196 阅读 · 0 评论 -
【对象实例化】
对象实例化的方式对象的内存布局对象的访问定位补充:直接内存不是虚拟机运行时数据库的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存空间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区。由于虚拟机栈、程序计数器内存空间太小,原创 2024-03-24 13:09:23 · 213 阅读 · 0 评论 -
【方法区】
Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾手机或者进行压缩。”但对于HotSportJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。在jdk7之前,习惯上把方法区,称为永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。补充说明:被声明为final的类变量的处理方式则不同,每个全局常量在编译的时候就会被分配了。原创 2024-03-23 15:17:44 · 273 阅读 · 0 评论 -
【堆空间】
一个JVM实例只存在一个堆内存,堆也是java内存管理的核心区域。java堆区在jvm启动的时候即被创建,其空间大小也就确定了。是jvm管理的最大的一块内存区域(堆内存的大小是可以调节的)。《java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享java堆,在这里还可以划分线程私有的缓冲区。“几乎”所有的对象实例都在这里分配内存—从实际使用角度看。原创 2024-02-25 12:10:00 · 468 阅读 · 0 评论 -
【程序计数器】
如上图使用反编译【javap -verbose .\PCRegisterTest.class】即可看到现示的看到程序计数器的作用。程序计数器(也称PC寄存器),用来存储指向下一条指令的地址,也即将要执行的指令代码。有执行引擎读取下一条指令。原创 2023-11-16 17:31:46 · 44 阅读 · 0 评论 -
【双亲委派机制】
三者承上下级关系。原创 2023-10-25 17:12:47 · 63 阅读 · 0 评论 -
垃圾收集算法
其中标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存一端移动,然后直接清理掉边界以外的内存。这种算法在当有大量存活对象的情况下,移动存活对象并更新所有引用这些对象的地方将会是一种极为负重的操作,而且这种对象移动操作必须全程暂停用户应用程序才能进行,因此也被形象的描述为“StopTheWorld”顾名思义,算法分为“标记”和“清除”两个阶段首先标记出所有需要回收的对象,在标记完成后,统一回收被标记的对象。2).内存空间的碎片化问题。...原创 2022-07-17 16:37:37 · 89 阅读 · 0 评论 -
可达性分析算法
虚引用也被成为“幽灵引用”或者“欢影引用”,最弱的一种引用,一个对象是否有虚引用的存在完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例。–强引用是最传统的“引用”的定义,是指在代码中普遍存在的引用赋值,即类似“Objectobj=newObject()”这种引用关系。节点开始,根据引用关系向下搜索,搜索过程所走过的“路程”称为引用链,如果某个对象到GCRoots间没有任何引用链相连接,或者换句话说对象到GCRoots不可达时,说明此对象是不可在被引用了。...原创 2022-07-17 16:13:06 · 616 阅读 · 0 评论 -
运行时数据区域
java虚拟机在执行java代码的过程中会把它所管理的内存划分为若干个不同的数据区域,分别是方法区、虚拟机栈、本地方法栈、堆、程序计数器程序计数器:每个线程都需要有一个独立的程序计数器,它可以看作是当前线程所执行的字节码的行号指示器 。各线程之前的计数器互不影响,独立存储。虚拟机栈:java虚拟机栈也是线程私有的,其生命周期与线程相同。每个方法被执行的时候,java虚拟机就会同步创建一个栈帧,用于存储局部变量表等信息。每个方法被调用直到执行完毕的过程,就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。本.原创 2022-05-28 19:28:52 · 75 阅读 · 0 评论