
jvm jdk
文章平均质量分 68
jdk
云川之下
这个作者很懒,什么都没留下…
展开
-
Java 变量存储的位置(局部变量、成员变量)
aa原创 2022-10-17 17:19:32 · 4587 阅读 · 0 评论 -
【jvm jdk】G1垃圾收集器详解
文章目录什么是G1垃圾收集器G1的堆内存划分G1的运行过程参考什么是G1垃圾收集器GC收集器的三个考量指标:占用的内存(Capacity)延迟(Latency)吞吐量(Throughput)随着硬件的成本越来越低,机器的内存也越来越大,GC收集器占用的内存基本上可以容忍。而吞吐量可以通过集群(增加机器)来解决。随着JVM中内存的增大,STW的时间成为JVM急迫解决的问题,如果还是按照传统的分代模型,使用传统的垃圾收集器,那么STW的时间将会越来越长。在传统的垃圾收集器中,STW的时间是无转载 2021-10-18 14:09:59 · 699 阅读 · 0 评论 -
JVM结构原理
文章目录概览参考概览1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中(把类加载至方法区)。2.执行引擎:负责执行class文件中包含的字节码指令3.内存区(也叫运行时数据区)是在JVM运行的时候操作所分配的内存区。运行时内存区主要可以划分为5个区域,如图:1.方法区(Method Area):用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆)原创 2021-10-14 15:16:30 · 324 阅读 · 0 评论 -
可达性分析算法GC Roots
当前主流的商用程序语言(Java、C#,上溯至前面提到的古老的Lisp)的内存管理子系统,都是通过可达性分析(Reachability Analysis)算法来判定对象是否存活的。这个算法的基本思路就是通过一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。原创 2021-09-09 14:30:48 · 1069 阅读 · 0 评论 -
mysql驱动与数据库及jdk各版本对应关系
mysql驱动与jdk版本还有着一定的关系,经现场实测及搜索资料,记录如下:应用JDK版本1.5 测试环境MySQL版本5.7 驱动版本5.1.40.jar 正常 生产环境MySQL版本8.0 驱动版本5.1.40.jar 连接不上 生产环境MySQL版本8.0 驱动版本8.0.11.jar 报JDK版本太低应用JDK8 生产环境MySQL版本8.0 驱动版本转载 2021-09-08 17:30:38 · 5437 阅读 · 1 评论 -
JVM内存模型
JVM内存模型,注意和java 内存模型JMM区分开参考:《绝了!华为技术专家居然把JVM内存模型讲解这么细致!》转载 2021-05-17 19:05:03 · 91 阅读 · 0 评论 -
【IDEA】IDEA查看字节码.class文件工具 jclasslib bytecode viewer & 插件市场market
https://www.cnblogs.com/tangliMeiMei/p/13033572.html转载 2020-12-08 14:52:33 · 1405 阅读 · 0 评论 -
【深入理解java虚拟机v3 】 4.2.6 jstack:Java堆栈跟踪工具(查看所有的线程信息&占cpu最高的进程和线程)
文章目录1. 概述2. 例子1. 概述Java堆栈跟踪工具jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些原创 2020-12-07 22:45:39 · 484 阅读 · 0 评论 -
【jvm jdk】查看jvm默认参数 PrintFlagsFinal & PrintFlagsInitial & PrintCommandLineFlags
-XX:+PrintFlagsInitial 是打印所有的默认参数设置-XX:+PrintFlagsFinal 是打印最终值,如果某个默认值被新值覆盖,显示新值-XX:+PrintCommandLineFlags 是打印那些被新值覆盖的项参考:《JVM实用参数(三)打印所有XX参数及值》...原创 2020-12-06 21:06:09 · 5404 阅读 · 0 评论 -
【jvm jdk】JVM老年代(Old)和新生代(年轻代或Young)的比例
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存模型大致为:从图中可以看出: 堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2转载 2020-11-29 15:31:33 · 13950 阅读 · 0 评论 -
【jvm jdk】 Tomcat类加载机制 & jsp动态加载原理
1、既然 Tomcat 不遵循双亲委派机制,那么如果我自己定义一个恶意的HashMap,会不会有风险呢?(阿里的面试官问)答: 显然不会有风险,如果有,Tomcat都运行这么多年了,那群Tomcat大神能不改进吗? tomcat不遵循双亲委派机制,只是自定义的classLoader顺序不同,但顶层还是相同的,还是要去顶层请求classloader.2、我们思考一下:Tomcat是个web容器, 那么它要解决什么问题:一个web容器可能需要部署两个应用程序,不同的应用程序可能会依赖同一个第三方类库的不转载 2020-11-21 21:18:43 · 767 阅读 · 0 评论 -
【jvm jdk】Java 操作码
参考:《Java 操作码》转载 2020-11-20 20:11:21 · 168 阅读 · 0 评论 -
【jvm jdk】java中的klass 和class
本节课,我们深入地理解一下反射中使用的Class类,Method类,Field类这三个类。其中,重点中的重点是Class类和Class对象。这个概念太容易混淆。我在写这篇文章之前,先在网上搜了一下,发现没有一篇文章是能讲得很清楚的。确实很少有文章能讲明白知乎上有很多大牛,关于Class对象也曾留下过只言片语,但又不够系统,因为对于这些进行JVM开发的牛人而言,Class对象是一个不屑于说的问题。但就是在这样的,开发者有点糊涂,大牛觉得不重要的地方,才容易产生知识的死角。而且网上有很多错误的概念,以讹转载 2020-11-19 19:42:53 · 3940 阅读 · 3 评论 -
免费的查看class文件的工具 Hex Editor
官网 https://hexeditor.en.softonic.com/原创 2020-11-13 16:10:51 · 1084 阅读 · 0 评论 -
【jvm jdk】JVM类加载器机制与类加载过程(运行main方法的原理)
文章目录一、为什么说Java语言是跨平台的?二、Java虚拟机启动、加载类过程分析Step 1.根据JVM内存配置要求,为JVM申请特定大小的内存空间Step 2. 创建一个引导类加载器实例,初步加载系统类到内存方法区区域中;Step 3. 创建JVM 启动器实例 Launcher,并取得类加载器ClassLoader一、为什么说Java语言是跨平台的?Java语言之所以说它是跨平台的、可以在当前绝大部分的操作系统平台下运行,是因为Java语言的运行环境是在Java虚拟机中。Java虚拟机消除了各个平转载 2020-10-20 21:11:00 · 1941 阅读 · 3 评论 -
【jvm jdk】类加载器6 为什么要自定义Java类加载器
参考:为什么要自定义Java类加载器原创 2020-10-20 19:27:30 · 169 阅读 · 0 评论 -
【jvm jdk】类加载器3 ClassLoader中的loadClass(),findClass(),defineClass()
1. loadclass加载指定类的入口,使用双亲委派模型,如果该类没有被加载过或父加载器没有加载成功,那么需要当前类处理器进行加载。加载一个类,那么需要知道类的路径信息,此时会调用findClass方法 protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLo原创 2020-10-15 10:09:04 · 1995 阅读 · 0 评论 -
【jvm jdk】类加载器2 双亲委派和破坏双亲委派
一、前言笔者曾经阅读过周志明的《深入理解Java虚拟机》这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践才能加深理解,正应对了那句话——“Talk is cheap, show me the code”。前段时间,笔者同事提出了一个关于类加载器破坏双亲委派的问题,以我们常见到的数据库驱动Driver为例,为什么要实现破坏双亲委派,下面一起来重温一下。二、双亲委派想要知道为什么要破坏双亲委派,就要先从什么是双亲委派说起,在此之前,我们先要了转载 2020-10-14 17:37:11 · 182 阅读 · 0 评论 -
【mysql jdbc】SPI介绍及实例分析
文章目录背景介绍什么是SPI机制使用场景实例ServiceLoader源码解析小结背景介绍提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface。而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现它的有点无处不在的感觉。比如我们经常使用的spring框架,其spring-web包下就在使用该机制:还有我们每个项目都离不开的日志框架log4j和数据库驱动框架中也同样的使用着SPI机制:mysql驱动同样也应用该机转载 2020-10-13 16:31:16 · 1294 阅读 · 0 评论 -
【jvm jdk】类加载器4 线程上下文类加载器 & DriverManager& Driver& mysql驱动详解(SPI)
文章目录1. 简介2. 用法3. 上下文类加载器的作用1. 简介线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 java.lang.Thread中的方法 getContextClassLoader()和 setContextClassLoader(ClassLoader cl)用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLoader(ClassLoader cl)方法进行设置的话,线程将继承其父线程的上下文类加载器。原创 2020-10-13 10:39:10 · 824 阅读 · 0 评论 -
【jvm jdk】深入理解Java 反射中 Class.forName 和 (ClassLoader & newInstance) 的区别
文章目录1.简介2. Java类装载的步骤3. Class.forName4.ClassLoader1.简介Class.forName和ClassLoader都可以用来加载类,但是也有如下的区别:Class.forName:除了将类的.class文件加载到jvm中之外,还会默认对类进行初始化,执行类中的静态代码块,以及对静态变量的赋值等操作。ClassLoader:将.class文件加载到jvm中,默认不会对类进行初始化,只有在newInstance才会去执行static块。2. Java类装原创 2020-10-12 17:15:59 · 718 阅读 · 0 评论 -
【jvm jdk】类加载器1 sun.misc.Launcher程序入口类 & 构建ExtClassLoader,ExtClassLoader
文章目录简介一、ClassLoader简介sun.misc.Launcher类是java的入口,在启动java应用的时候会首先创建Launcher类,创建Launcher类的时候会准备应用程序运行中需要的类加载器,位于jre/lib/rt.jar中。一、ClassLoaderLauncher作为JAVA应用的入口,根据双亲委派模型,Laucher是由JVM创建的,它类加载器应该是BootStrapClassLoader, 这是一个C++编写的类加载器,是java应用体系中最顶层的类加载器,负责加载J原创 2020-10-10 14:35:16 · 8057 阅读 · 0 评论 -
【jvm jdk】class文件中的字段表集合--field字段在class文件中是怎样组织的
文章目录1.概述2. 字段表集合在class文件中的位置3. Java中的一个Field字段应该包含那些信息?4. field字段的访问标志5. 字段的数据类型表示和字段名称表示6.属性表集合-----静态field字段的初始化7.实例解析读完本文,你将会学到:类中定义的field字段是如何在class文件中组织的不同的数据类型在class文件中是如何表示的static final类型的field字段的初始化赋值问题1.概述字段表集合是指由若干个字段表(field_info)组成转载 2020-09-30 19:37:07 · 383 阅读 · 0 评论 -
【jvm jdk】Class文件中的常量池详解(下)
NO9.类中引用到的field字段在常量池中是怎样描述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info)一般而言,我们在定义类的过程中会定义一些 field 字段,然后会在这个类的其他地方(如方法中)使用到它。有可能我们在类的方法中只使用field字段一次,也有可能我们会在类定义的方法中使用它很多很多次。举一个简单的例子,我们定一个叫Person的简单 java bean,它有name和age两个field字段,如下所示:public class转载 2020-09-30 14:31:09 · 232 阅读 · 0 评论 -
【jvm jdk】切换jdk版本不成功解决
背景JDK区分安装版和zip解压版,在命令行通过java -version查看效果,前者安装后可能在没有设置JAVA_HOME和PATH情况下,也能正确显示,后者必须设置,这是什么原因呢?当我们本地存在多个版本的JDK,切换目标版本时,一般通过修改JAVA_HOME,但是有时会失效,是什么原因呢?解密对于安装版,在安装过程中,会写入一些注册表或环境变量,因此即使不设置JAVA_HOME和PATH,也会按照优先级,从多个地方查看;而对于解压版,不会有自动写注册表,只能从AVA_HOME和PATH中查找原创 2020-09-24 00:47:44 · 1294 阅读 · 0 评论 -
【jvm jdk】JVM client模式和Server模式的区别
文章目录概述1. 当前是Client or Server?ClientServer2. Client与Server切换2.1 模式配置文件32位JDK64位JDK2.2 模式切换概述JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用转载 2020-09-24 00:04:24 · 2004 阅读 · 0 评论 -
【jvm jdk】如何查看Open JDK jvm使用的垃圾收集器
参考:https://www.cnblogs.com/grey-wolf/p/9217497.htmlhttps://blog.youkuaiyun.com/yelvgou9995/article/details/106444351原创 2020-09-17 14:34:45 · 1977 阅读 · 3 评论 -
HotSpot NMT介绍
OverviewThe Native Memory Tracking (NMT) is a Java Hotspot VM feature that tracks internal memory usage for a HotSpot JVM. You can access NMT data using jcmd utility. NMT in this release does not tra...原创 2019-11-18 15:03:47 · 401 阅读 · 0 评论 -
【jvm jdk】 jmap命令使用说明
1.命令预览./jmap -help/zxjdk-8u212-linux-x64/bin # ./jmap -helpUsage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to con...原创 2019-11-18 13:54:27 · 734 阅读 · 0 评论