jvm
文章平均质量分 54
sgy_yuebin
java爱好者
展开
-
JVM之类加载器
负责加载class文件,class文件在文件开头有棒定的文件标示, 将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定echo %JAVA_HOME%echo %PATH%echo %CLASSPATH%类加载器分为两种,一种是虚拟机自带的类加载器,另一种是自定义的类加载器。我们通常不会自定义类加载器,而是使用java自带的类加载器,但是在框架、服务原创 2021-01-24 08:59:03 · 190 阅读 · 0 评论 -
你说你做过JVM调优和参数配置,请问如何查看JVM系统默认值
JVM的参数类型标配参数 (了解)-version-helpjava -showversionx参数(了解)-Xint:解释执行-Xcomp:第一次使用就编译成本地代码-Xmixed:混合模式xx参数(重点)Boolean类型公式-XX:+或者-某个属性值+表示开启 -表示关闭如何查看一个正在运行中的java,它的jvm参数是否开启?具体参数是多少jps: 查看java后台进程jinfo: 正在运行的java程序后台信息eg:jinfo -flag PrintGC原创 2021-01-24 08:58:48 · 379 阅读 · 0 评论 -
JVM之快速回顾复习串讲
JVM内存结构JVM体系概述Java8以后的JVMGC的作用域常见的垃圾回收算法引用计数复制标记清除标记整理原创 2021-01-24 08:58:18 · 112 阅读 · 0 评论 -
JVM之栈 Java Stack
1.Stack 栈是什么栈也叫栈内存,主管Java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。8种基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配。java培训2.栈存储什么栈帧中主要保存3 类数据:本地变量(Local Variables):输入参数和输出参数以及方法内的变量;栈操作(Operand Stack):记录出栈、入栈的操作;栈帧数据原创 2021-01-24 08:58:02 · 122 阅读 · 0 评论 -
对于JDK自带的JVM监控和性能分析工具用过哪些?一般怎么用
是什么命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。性能分析工具原创 2021-01-24 08:57:40 · 311 阅读 · 0 评论 -
你平时工作用过的JVM常用基本配置参数有哪些?
基础知识case常用参数-Xms初始化大小内存,默认为物理内存1/64等价于-XX:InitialHeapSize-Xmx最大分配内存,默认物理内存的1/4等价于-XX:MaxHeapSize-Xss设置单个线程栈的大小,一般默认为512K~1024K等价于-XX:ThreadStackSize-XX:ThreadStackSize = 0 , 表示使用默认512K~1024K-XX:ThreadStackSize != 0 , 表示使用自己设置的-Xmn设置年轻代原创 2021-01-24 08:57:25 · 186 阅读 · 0 评论 -
JVM之面试题
请谈谈你对JVM的理解?java8的虚拟机有什么更新?什么事OOM?是什么StackOverflowError?有哪些方法分析?JVM的常用参数调优你知道哪些?谈谈JVM中,对类加载器的认识?原创 2021-01-24 08:57:07 · 79 阅读 · 0 评论 -
JVM之深入理解堆
别名幸存区0(s0) —> from / to幸存区1(s1) —> to / from堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。// 如果设置最小堆内存和最大堆内存,建议设置成相同值-Xms10m原创 2021-01-24 08:59:26 · 510 阅读 · 0 评论 -
JVM之双亲委派机制&沙箱安全机制
双亲委托机制所谓双亲委托机制,就是加载一个类,会先获取到一个系统类加载器AppClassLoader的实例,然后往上层层请求,先由BootstarpClassLoader去加载,如果BootStrapClassLoader发现没有,再下发给ExtClassLoader去加载,还是没有,才由AppClassLoader去加载。如果还是没有,则报错JDK提供java.lang.String类,默认在rt.jar这个包里面,所以,默认会由BootstarpClassLoader加载,所以,我们自己编原创 2021-01-24 08:59:38 · 193 阅读 · 0 评论 -
JVM之体系结构
暗色表示每个线程都是私有的并且没有垃圾回收亮色表示所有线程共享并且存在垃圾回收原创 2021-01-24 08:59:51 · 197 阅读 · 0 评论 -
jvm之常用的性能调优工具
JDK命令行Eclipse:Memory Analyzer ToolJconsoleVisual VM(实时监控 推荐~)Jprofiler(推荐~)Java Flight Recorder(实时监控)GCViewerGCEasy原创 2021-01-23 14:36:40 · 99 阅读 · 0 评论 -
JVM之堆内存调优
堆结构java7java8在Java8中,永久代己经被移除,被一个称为元空间的区域所取代。元空间的本质和永久代类似。元空间与永久代之间最大的区别在于:永久带使用的JVM的堆内存,但是java8以后的元空间并不在虚拟机中而是使用本机物理内存。因此,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSize控制,而由系统的实际可用空间来控制。默认出厂JVM元空间只会用原创 2021-01-23 14:35:45 · 289 阅读 · 0 评论 -
JVM之本地接口Native
本地接口的作用就是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,换而言之,Java的刚出现的时候(1995年10月)正式C/C++横行的时候,如果没有调用C/C++的程序很难立足,于是在内存中专门开辟了一块区域处理标记为native的方法,在Execution Engine执行的时候加载native libraies。目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机或者Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达原创 2021-01-23 14:33:54 · 163 阅读 · 0 评论 -
JVM之PC寄存器
PC寄存器( PC register ):每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用原创 2021-01-23 14:33:24 · 272 阅读 · 0 评论 -
JVM之JVM位置
原创 2021-01-23 14:32:26 · 133 阅读 · 1 评论 -
JVM之GC垃圾回收
GC垃圾回收日志信息含义伊甸园区满了发生GC[GC (Allocation Failure) [PSYoungGen: 2039K->491K(2560K)] 2039K->731K(9728K), 0.0010255 secs][Times: user=0.00 sys=0.00, real=0.10 secs] Full GC垃圾回收日志信息含义养老区满了发生Full GC[Full GC (Allocation Failure) [PSYoungGen: 480K-&g原创 2021-01-23 14:31:21 · 541 阅读 · 0 评论 -
JVM之方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别
JVM体系结构根据 JVM 规范,JVM 运行时区域大致分为 方法区、堆、虚拟机栈、本地方法栈、程序计数器 五个部分。1)、方法区方法区是JVM 所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与 堆 进行区分,通常又叫 非堆。 关于 方法区内存溢出 的问题会在下文中详细探讨。2)、堆堆内存也是 JVM 所有线程共享的部分,在虚拟机启动的时候就已经创建。所有的对象和数组都在堆上进行分配。这部分空间可通过 GC 进行回收。当申请不到空间时会抛原创 2021-01-23 14:27:45 · 1105 阅读 · 0 评论 -
请谈谈你对OOM的认识?
Throwable类关系java.lang.StackOverFlowError通过迭代,反复调用方法,使栈区撑爆,默认大小是512k/** * Created by gysui on 2020/12/7 */public class StackOverFlowError { public static void main(String[] args) { stackOverFlowError(); } private static void stac原创 2021-01-22 20:13:40 · 172 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用分别是什么?
整体架构强引用(默认支持模式)当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。强引用是最常见的普通对象引用,只要还有前饮用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰到这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾机制回收的,即使该对象以后永远都不能被用到,JVM也不会回收。因此强引用是造成Java内存泄露的主要原因之一。原创 2021-01-22 20:10:28 · 892 阅读 · 0 评论