
JVM 原理
以类加载,JVM内存模型,垃圾回收多维度探索JVM原理
珞珈山紫竹
希望用最简单的语言去阐释研发
展开
-
spring 事务管理
使用@trasaction 其中包含一些核心参数 spring @Transactional注解参数详解 - Just_Do - 博客园事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理,例子: 当类中某些方法不需要事物时: 事物传播行为介绍: @Transactionhttps://www.cnblogs.com/caoyc/p/5632963.html spring @Transactional注解参数详解 - Just_Do - 博客园 ...原创 2021-12-27 17:06:28 · 118 阅读 · 0 评论 -
JVM 调优的一些参数
设置堆栈大小 -xms 设置最小堆内存大小 -xmx设置最大堆内存大小 -xmn 设置年轻代大小 -xss 设置每个线程的栈帧大小 如果最小堆满了之后会尝试gc,如果GC 之后还无法得到足够的内存空间,就会在最大内存范围内扩大堆空间 设置GC工具 XX:+UseParallelGC -XX:ParallelGCThreads=20 XX:+UseParallelOldGC JVM参数调优总结 -Xms -Xmx -Xmn -Xss_jakeswang的博客-优快云博客_xms .原创 2021-12-27 16:19:20 · 145 阅读 · 0 评论 -
从并发编程的角度来看JVM内存模型
从并发的角度来看JVM的内存模型JMM(java memory model) 传统意义上的JVM内存模型就是分为5个部分,方法区,本地方法区,栈,堆,计数器。 从多线程的角度来看, JVM被分为线程私有区域和线程共享区域 通过上面这两张图整合理解,线程的私有区域虚拟机栈,本地方法区,和程序计数器,内存共享区域主要为方法区、和堆。 多线程之间的通信: 多线程的共享机制有两种一种是消息传递,一种是共享内存。 消息传递主要是通过wait() notify() 两个方法来.原创 2021-09-15 23:56:47 · 121 阅读 · 0 评论 -
JVM 方法区在java1.8 之后发生的变化
Java8 之前HotSpot 通过永久代来实现方法区的,但是如果class过多,就会出现OOM异常,例如tomcat加载过多第三方包的时候,就会出现OOM异常。 Java8 之后就JVM通过把方法区加载数据存储在内存空间中,所谓的元空间,这样之后是否会发生OOM就取决于物理机内存的大小。 ...原创 2021-09-10 14:28:50 · 490 阅读 · 0 评论 -
JVM的垃圾回收算法和常见回收器
一、怎么识别一个对象是否被回收 · 引用计数法 每一个对象被引用时,都会对他的引用次数+1,如果引用卸载了那么它的引用次数-1,如果一个对象的引用为0,那么就是说这个对象可以被回收。这种会存在一个问题,就是循环引用,A引用B,B引用A,两个对象相互引用引用次数会一直是1。 ·可达性分析 通过GC Root(我觉得就是Application 启动)开始向下追踪,查看一个对象是否可达,如果都不可达说明对象可以被回收。 补充知识: Java 中的四种引用类型: 强引用:就是将对象赋值给一个变原创 2021-09-08 14:14:43 · 155 阅读 · 0 评论 -
JVM的垃圾回收机制
每起一个jvm实例是一个进程。一个进程下可以运行多个线程。每一个jvm中的线程在操作系统中都有一个原生线程唯一对应。JVM每一个线程启动的初始化之后会进行本地化存储,缓冲区分配,同步对象,程序计数器的操作,然后thread.run 调用本地方法区的方法调用操作系统的线程执行。线程执行结束后,操作系统线程会释放,同步释放线程占用资源。 JVM 常用的线程: 虚拟机线程,周期性人物线程,GC线程,编辑器线程,信号分发线程。 · 线程共有区域才需要垃圾回收机制(随着JVM的创建而创建,销毁而销毁),线.原创 2021-09-07 23:47:15 · 713 阅读 · 0 评论 -
JVM双亲委派机制的简单理解
类的唯一性 在编码的过程中我们考虑的是通过类的全类名来限制类的唯一性,而在类的加载过程中是通过加载器和全类名统一控制类的唯一性。(双亲委派模型就是为了控制这种) 几种类加载器 · 启动类加载器 Bootstrap ClassLoader 加载JAVA_HOME 下的lib 下面的类库,是JVM的一部分,使用C++ 实现。启动类加载器无法被java程序直接使用。 · 扩展类加载器Extension ClassLoader 加载JAVA_HOME 下的lib/ext 下面的类库,开发者可...原创 2021-09-03 14:20:05 · 165 阅读 · 0 评论 -
JVM 栈的简单理解
补充知识:String类型是应用类型,但是每次复制都会初始化一个字符串对象在堆内存里。 JVM内部构成: JVM 在运行时会为每一个线程简历一个独立的栈,每一个线程在运行时会为每一个方法建立一个帧。 每一个帧的内部构造方式 每一个线程在操作一个方法时都会在自己栈中压入一个当前方法帧,当方法遇到return和异常时,对应的帧就会出栈。对应着pop和push。 补充: 在jvm运行时局域:五大区域 本地方法栈、虚拟机方法栈、程序计数器为线程私有。方法区..原创 2021-09-01 16:14:24 · 188 阅读 · 0 评论 -
JVM 对Class文件加载的简单理解
补充知识: 重写和重载: 重写发生子类与父类之间子类对父类的相同名字和相同参数的方法进行重新构造 重载在同一个类中构造相同名字不同参数的方法 Static 关键字 类级别修饰关键字修饰的,在类加载过程有重要作用。修饰的方法和字段对比对象。 Final 关键字 可以通过字面意思,最后的。修饰的类不能被继承、所有方法不能被重写。修饰的方法不能被重写。修饰的成员变量“初始化”之后不能被修改。对比同时使用 static和final 修饰为什么static 和final 同时修饰的是常量..原创 2021-08-30 11:29:17 · 240 阅读 · 1 评论