java
文章平均质量分 84
丢爸
活到老,学到老...
展开
-
Java学习-内部类
【代码】Java学习-内部类。原创 2024-06-08 15:58:47 · 56 阅读 · 0 评论 -
Java学习-JDBC(一)
create table t_emp(emp_id int auto_increment comment ‘员工编号’ primary key,emp_salary double(10,5) not null comment’员工薪资’,emp_name varchar(100)not null comment’员工姓名’,emp_age int not null comment ‘员工年龄’);原创 2024-06-08 00:02:50 · 402 阅读 · 0 评论 -
JVM学习-JVM运行时参数
JVM的JIT编译模式相关的选项。原创 2024-06-07 16:04:27 · 683 阅读 · 0 评论 -
JVM学习-Arthas
【代码】JVM学习-Arthas。原创 2024-06-06 22:28:45 · 1162 阅读 · 0 评论 -
JVM学习-Jprofiler
使用方便,界面操作友好对被分析的应用影响小(提供模板)CPU,Tread,Memory分析功能尤其强大支持对jdbc,noSql,jsp,servlet,socket进行分析支持多种模式(离线、在线)的分析支持监控本地、远程JVM跨平台,拥有多种操作系统版本。原创 2024-06-05 22:52:10 · 756 阅读 · 0 评论 -
JVM学习-内存泄漏
【代码】JVM学习-内存泄漏。原创 2024-06-05 16:23:41 · 1107 阅读 · 0 评论 -
JVM学习-MAT
Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的,不仅可以单独使用,还能以插件方式嵌入Eclipse中使用,是一款免费的性能分析工具。原创 2024-06-04 22:05:32 · 913 阅读 · 0 评论 -
JVM学习-监控工具(三)
Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的,不仅可以单独使用,还能以插件方式嵌入Eclipse中使用,是一款免费的性能分析工具。原创 2024-06-04 15:59:55 · 999 阅读 · 2 评论 -
JVM学习-监控工具(二)
由于jmap将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,jmap需要借助安全点机制,让所有线程停留在不改变堆中数据的状态,由jmap导出的堆快照必定是安全点位置的,这可能导致基于该堆快照的分析结果存在偏差举个例子:假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么:live选项将无法探知到这些对象如果某个线程长时间无法跑到安全点,jmap将一直等下去,与前面的jstat不同,垃圾回收器会主动将jstat所需要的摘要数据保存至固定位置之中,而jstat只需直接读取即可。原创 2024-06-03 22:42:19 · 1105 阅读 · 0 评论 -
JVM学习-监控工具(一)
使用数据说明问题,使用知识分析问题,使用工具处理问题无监控,不调优!命令行工具在JDK安装目录下,可以查看到相应的命令行工具,如下图jps(Java Process Status)显示指定系统内所有的Hotpot虚拟机进程,可用于查询正在运行的虚拟机进程,对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的,是唯一的基本语法jps [options] [hostid]【options】-q:仅显示LVMID(local virtual machine id),即原创 2024-06-03 15:41:18 · 766 阅读 · 2 评论 -
JVM学习-自定义类加载器
隔离加载类在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境,如Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序修改类加载的方式类的加载模型并非强制,除Bootstrap外,其他的加载并非一定要引入,根据实际情况在某个时间点进行按需进行动态加载扩展加载源比如从数据库、网络、甚至是电视机机顶盒进行加载防止源码泄露Java代码容易被编译和篡改,可以进行编译加密,那么类加载也需要自定义,还原加密的字节码。原创 2024-06-02 22:45:45 · 374 阅读 · 0 评论 -
JVM学习-详解类加载器(二)
JDK1.1时期:针对安全机制做了改进,增加了安全策略,允许用户指定代码对本地资源的访问权限。原创 2024-06-01 23:25:22 · 519 阅读 · 0 评论 -
JVM学习-详解类加载器(一)
在Java的日常应用开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式体现Java语言的强大生命力和巨大魅力的关键因素之一便是,Java开发者可以自定义类加载器来实现类库的动态加载,加载源可以是本地的JAR包,也可以是网络上的远程资源通过类加载器可以实现非常绝妙的插件机制。原创 2024-06-01 16:37:16 · 1285 阅读 · 0 评论 -
JVM学习-类加载过程(二)
【代码】JVM学习-类加载过程(二)原创 2024-05-31 16:12:06 · 1332 阅读 · 0 评论 -
JVM学习-类加载过程(一)
在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载按Java虚拟机规范,从class文件加载到内存中的类,到类卸载出内存为止,它的整个生命周期包含以下7个阶段。原创 2024-05-31 08:45:53 · 1028 阅读 · 0 评论 -
JVM学习-字节码指令集(四)
【代码】JVM学习-字节码指令集(四)原创 2024-05-30 16:12:05 · 853 阅读 · 0 评论 -
JVM学习-字节码指令集(三)
条件跳转指令:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,这些指令都接收两个字节的操作数,用于跳转的位置(16位符号整数作为当前位置的offset)条件跳转指令通常和比较指令结合使用,在条件跳转执行前,一般可以先用比较指令进行栈顶元素的准备,然后进行条件跳转。原创 2024-05-30 11:09:09 · 1247 阅读 · 0 评论 -
JVM学习-字节码指令集(二)
【代码】JVM学习-字节码指令集(二)原创 2024-05-29 16:32:51 · 1249 阅读 · 0 评论 -
JVM学习-字节码指令集(一)
Java字节码对于虚拟机,好像汇编语言对于计算机,属于基本执行指令Java虚拟机的指令由一个字节长度的,代表某种特定操作含义 的数字(称为操作码Opcode)以及跟随其后的零至多个代表此操作所需参数(操作数,Operands)而构成,由于Java虚拟机采用面向操作数栈而不是寄存器的结构,大多数指令都不包含操作数,只有一个操作码由于限制了Java虚拟机操作码的长度为一个字节(0-255),意味着指令集的操作码总数不可能超过256条。原创 2024-05-28 23:18:47 · 1129 阅读 · 0 评论 -
JVM学习-彻底搞懂Java自增++
【代码】JVM学习-彻底搞懂Java自增++原创 2024-05-28 22:08:17 · 647 阅读 · 0 评论 -
JVM学习-javap解析Class文件
解析字节码的作用通过反编译生成字节码文件,可以深入了解Java工作机制,但自己分析类文件结构太麻烦,除了第三方的jclasslib工具外,官方提供了javapjavap是jdk自带的反解析工具,它的作用是根据class字节码文件,反解析出当前类对应的code区(字节码指令)、局部变量表、异常表、代码行偏移量映射表、常量池等信息通过局部变量表,可以查看局部变量的作用域范围、所在槽位等信息,甚至可以看到槽位复用信息java -g操作解析字节码文件得到的信息中,有些信息(如局部变量表、指令和代码行原创 2024-05-27 22:33:08 · 599 阅读 · 0 评论 -
Java学习-简单的用户管理系统
【代码】Java学习-简单的用户管理系统。原创 2024-05-27 10:19:12 · 351 阅读 · 0 评论 -
JVM学习-Class文件结构②
2字节无符号整数,指向常量池的索引,它提供了类的全限定名,如com/chapter09/Demo,this_class的值必须是对常量池表中某项的一个有效索引,常量池在这个索引处的成员都必须为CONSTANT_Class_info类型结构体,该结构表示这个class文件所定义的类或接口。原创 2024-05-26 22:59:29 · 1132 阅读 · 0 评论 -
JVM学习-Class文件结构①
常量池中常量的数量是不固定的,所以在常量池的入口需要放置一项u2类型的无符号数,代表常量池容量计数值(constant_pool_count),与Java中语言习惯不一样的是,这个容量计数是从1而不是0开始的。由上表可见,Class文件使用了一个前置的容量计数器(constant_pool_count)加若十个连续的数据项(constant_pool)的形式来描述常量池内容,我们把一系列连续常量池数据称为常量池集合。随着Java虚拟机的不断发展,常量内容日渐丰富,常量池是整个Class文件的基石。原创 2024-05-26 21:40:52 · 828 阅读 · 0 评论 -
JVM学习-垃圾收集器(三)
G1垃圾收集器增加了一种新的内存区域,叫做Humongous内存区域,主要用于存放大对象,如果超过1.5个region,就放到H。G1提供了三种回收模式:YoungGC、Mixed GC和Full GC,在不同条件下被触发。G1 GC垃圾回收过程主要包括三个环节。①开启G1垃圾收集器。原创 2024-05-24 23:33:54 · 711 阅读 · 0 评论 -
JVM学习-垃圾收集器(二)
【代码】JVM学习-垃圾收集器(二)原创 2024-05-24 10:47:47 · 686 阅读 · 0 评论 -
JVM学习-垃圾回收器(一)
- 吞吐量:运行用户代码的时间占总运行时间的比例(总运行时间:程序运行时间+内存回收时间)- 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间原创 2024-05-23 23:34:46 · 1012 阅读 · 2 评论 -
JVM学习-垃圾回收(三)
Safe Point选择很重要,如果太少可能导致GC等待的时间太长,如果太频繁可能导致运行时的性能问题,大部分指令的执行时间都非常短暂,通常会根据“程序在执行时并非所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这个位置称为安全点(SafePoint)”为标准,比如:选择一些执行时间较长的指令作为Safe Point,如方法调用、循环跳转和异常跳转等。,我们也可以把Safe Region看作扩展了的SafePoint。原创 2024-05-23 17:16:48 · 717 阅读 · 0 评论 -
JVM学习-垃圾回收(二)
将活着的内存空间分为两块,每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,最后完成垃圾回收。标记清除算法的确可以应用在老年代中,但是该算法不仅执行效率低下,而且执行完内存回收后还会产生内存碎片,所以JVM设计者需要在此基础上进行改进,标记-压缩算法由此诞生。而为了尽量兼顾上面提到的三个指标,标记-整理算法相对来说更平滑一些,但是效率上不尽如人意,它比复制算法多了一个标记的阶段,比标记-清除多了一个整理内存阶段。原创 2024-05-22 23:34:43 · 998 阅读 · 0 评论 -
JVM学习-垃圾回收(一)
垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾如果不及时对内存的垃圾进行清理,垃圾对象所占用的内存空间会一直保留到应用程序结束,被保留的空间无法被其它对象所用,甚至可能导致内存溢出。原创 2024-05-22 16:45:18 · 1578 阅读 · 0 评论 -
JVM学习-虚拟机层面看String
【代码】JVM学习-虚拟机层面看String。原创 2024-05-21 23:04:54 · 1205 阅读 · 0 评论 -
JVM学习-执行引擎
当然是否需要启动JIT编译器将字节码直接编译为对应平台的本地机器指令,则需要根据代码被调用。大部分的程序代码转换为物理机的目标代码或虚拟机能执行的指令集之前,都需要经过下图各个步骤。,将其直接编译为对应平台的本地机器指令,以此提升Java程序的执行性能。”,JIT编译器在运行时会针对那些频繁被调用的热点代码做出。Java代码编译是由Java源码编译器来完成,流程图如下。而定,关于那些需要被编译为本地代码的字节码,称为“Java字节码的执行是由JVM执行引擎来完成。原创 2024-05-21 15:32:45 · 1177 阅读 · 0 评论 -
JVM学习-直接内存
【代码】JVM学习-直接内存。原创 2024-05-20 23:00:12 · 135 阅读 · 0 评论 -
JVM学习-对象实例化、内存布局、访问定位
【代码】JVM学习-对象实例化、内存布局、访问定位。原创 2024-05-20 22:15:44 · 565 阅读 · 0 评论 -
JVM学习-方法区(元空间)
被声明为final类变量的处理方法则不同,每个全局常量在编译的时候就会被分配了。原创 2024-05-19 23:25:49 · 1046 阅读 · 0 评论 -
JVM学习-堆空间(四)
【代码】JVM学习-堆空间(四)原创 2024-05-19 15:48:14 · 541 阅读 · 0 评论 -
JVM学习-堆空间(三)
JVM在进行GC时,并非每次都对新生代、老年代、方法区(元空间)三个区域一起回收,大部分时间回收的都是新生代针对Hotspot VM的实现,它里面的GC按照回收区域分两大类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)原创 2024-05-18 16:38:16 · 1147 阅读 · 0 评论 -
JVM学习-堆空间(二)
为新对象分配内存是一件非常严谨和复杂的任务,JVM设计者不仅需要考虑内存如何分配,在哪里分配等问题,并且由于内存分配算法与内存回收算法密切相关,所以还需考虑GC执行完内存回收后是否会在内存空间产生内部碎片。原创 2024-05-18 14:59:43 · 764 阅读 · 0 评论 -
JVM学习-堆空间(一)
每个进程(JVM实例)拥有唯一的方法区和堆空间,拥有唯一的Runtime实例(基于饿汉式方式),线程共享进程的方法区和堆空间,每个线程拥有独立的程序计数器、本地方法栈和虚拟机栈。原创 2024-05-17 16:25:15 · 1043 阅读 · 1 评论 -
JVM学习-本地方法栈
本地方法栈Java虚拟机栈用于管理Java方法的调用,本地方法栈用于管理本地方法的调用本地方法栈也是线程私有的允许被实现成固定或者是可动态扩展的内存大小如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将抛出一个StackOverflowError异常如果本地方法栈可以动态扩展,并且在深度扩展的时候无法申请到足够的内存,可在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机会抛出一个OutOfMemoryError异常本地方法是使用C语言实现的它的原创 2024-05-17 14:22:53 · 201 阅读 · 0 评论