JVM
JAVA菜鸟程序员
不要在该奋斗的年纪选择了安逸,只有度过了一段连自己都被感动的日子,才会变成那个最好的自己。
展开
-
GC常用参数及垃圾收集器常用参数配置
一、GC常用参数* -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间* -XX:+UseTLAB 使用TLAB,默认打开* -XX:+PrintTLAB 打印TLAB的使用情况* -XX:TLABSize 设置TLAB大小* -XX:+DisableExplictGC System.gc()不管用 ,FGC* -XX:+PrintGC* -XX:+PrintGCDetails* -XX:+PrintHeapAtGC* -XX:+PrintGCT.原创 2021-03-02 10:15:49 · 531 阅读 · 0 评论 -
Can not find java process. Try to pass <pid> in command line. Please select an available pid
一、问题描述在下载完了arthas后,直接通过java -jar arthas-boot.jar执行,就直接报错了。二、原因在arthas启动前,需要有java进程启动。三、解决方法在启动arthas之前先启动一个java程序测试代码如下:public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0);原创 2021-02-26 09:37:40 · 3026 阅读 · 0 评论 -
jconsole和jvisualVm远程连接服务器,查看JVM信息
一、测试代码public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0); String name = "张三"; int age = 5; Date birthdate = new Date(); public void m() { }原创 2021-02-25 15:44:49 · 520 阅读 · 2 评论 -
jstack和线程dump分析
一、测试代码写了一个死锁的代码。public class DeadLockDemo { private static String obj1 = "obj1"; private static String obj2 = "obj2"; public static void main(String[] args) { Thread t1 = new Thread(new Lock1()); Thread t2 = new Thread(ne原创 2021-02-25 11:46:09 · 401 阅读 · 4 评论 -
jstack命令执行报错:Unable to open socket file: target process not responding or HotSpot VM not loaded
一、背景最近在学jvm调优,在使用jstack命令时,出现报错。网上查了好多,都没有找到合适解决方法。二、解决方法1.测试代码public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0); String name = "张三"; int age = 5; Date b原创 2021-02-25 11:16:33 · 7537 阅读 · 8 评论 -
JVM参数之GC日志配置
https://blog.csdn.net/qq_40902067/article/details/106004313转载 2021-02-24 16:56:06 · 450 阅读 · 0 评论 -
常见的垃圾回收器
一、参考文章https://www.cnblogs.com/datiangou/p/10245874.html二、常用垃圾回收器1. JDK诞生 Serial追随 提高效率,诞生了PS,为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC,它开启了并发回收的过程,但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS 并发垃圾回收是因为无法忍受STW2. Serial 年轻代 串行回收3. PS 年轻代 并行回收4. ParNew 年轻代 配合CM原创 2021-02-22 10:52:14 · 703 阅读 · 0 评论 -
对象创建过程以及对象在内存中的布局
1).loading:加载,将对象的class文件加载到内存2).linking(verification、preparation、resolution)verification:校验calss文件的格式是否符合虚拟的规范preparation:将静态变量赋默认值resolution:将类、方法、属性等符号引用解析为直接引用3).initializing:将静态变量设为初始值,同时执行静态语句块4).申请对象内存5).成员变量赋默认值6).调用构造方法<...原创 2021-02-19 10:19:04 · 183 阅读 · 0 评论 -
volatitle、synchronized实现细节
一、volatitle实现细节1).字节码层面加了一个ACC_VOLATITLE标识2).jvm层面volatitle内存区的读写,都加屏障写操作:StoreStoreBarriervolatile 写操作StoreLoadBarrier读操作LoadLoadBarriervolatile读操作LoadStoreBarrier3).os和硬件层面参考这篇文章:https://blog.csdn.net/qq_26222859/article/de...原创 2021-02-19 10:17:57 · 135 阅读 · 0 评论 -
Java中synchronized同步锁用法及作用范围
synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。Synchronized 作用范围 1. 作用于方法时,锁住的是对象的实例(this); 2. 当作用于静态方法时,锁住的是Class实例,又因为Class的相关数据存储在永久带PermGen(jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁...原创 2019-12-10 16:36:48 · 615 阅读 · 0 评论 -
JVM 类加载机制
JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这 五个过程。一、加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以...原创 2019-12-05 14:37:45 · 173 阅读 · 0 评论 -
JVM垃圾回收算法
一、标记清除算法(Mark-Sweep)这个是最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清 除阶段回收被标记的对象所占用的空间。如图:从图中我们就可以发现,该算法最大的问题是内存碎片化严重,后续可能发生大对象不能找到可 利用空间的问题。二、复制算法(copying)为了解决 Mark-Sweep 算法内存碎片...原创 2019-12-04 09:47:52 · 122 阅读 · 0 评论 -
JVM如何确定垃圾
一、引用计数法在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收 对象。二、可达性分析为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的...原创 2019-12-04 09:37:38 · 717 阅读 · 1 评论 -
JVM内存模型
一、JVM内存模型组成主要由:方法区,堆,本地方法栈,虚拟机栈,程序计数器五个部分组成二、详细介绍1)、程序计数器(线程私有) 一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的 程序计数器,这类内存也称为“线程私有”的内存。 正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如 果还是 Nati...原创 2019-12-02 20:00:00 · 98 阅读 · 0 评论 -
深入JVM类加载机制
从ClassLoad开始说起ClassLoader顾名思义就是我们所常见的类加载器,其作用就是将编译后的class文件加载内存当中.在应用启动时,JVM通过ClassLoader加载相关的类到JVM当中.在具体了解ClassLoader之前我们先来了解下JVM的类加载机制.1. 类加载机制虚拟机将class文件加载到内存,并对数据校验、转换解析和初始化,最终形成可以被虚拟机直接使用的j...转载 2018-08-13 11:14:43 · 145 阅读 · 0 评论 -
tomcat高并发配置及调优
一、高并发配置1. 修改tomcat/conf/server.xml配置文件,默认情况下Excutor是被注释的,本文只是参考配置,需要根据项目的访问量大小来进行适当的修改,配置参数如下:<Executor name="tomcatThreadPool" # 配置TOMCAT共享线程池,NAME为名称 namePrefix="HTTP-8088-...原创 2018-07-24 16:41:18 · 8109 阅读 · 0 评论 -
JVM结构、GC工作机制详解
外话:最近在应聘阿里2015暑期实习,感触颇多。机会总是留给有准备的人的,所以平常一定要注意知识的巩固和积累。知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你?关于JVM和GC,我相信学Java的绝大部分人都听过,很多公司的面试官都爱问,一开始我也很头痛,问这么底层干什么,所以我每次面试也只是看看答案敷衍了事。最近面完阿里感觉真不能这样,知识不仅要知其然,还要知其所以然。其实弄懂了JVM...转载 2018-07-17 09:43:22 · 143 阅读 · 0 评论