JVM相关
文章平均质量分 83
猿人小郑
猿人一族,生活在一个虚拟的世界,那里面只有0和1.
展开
-
Java中用到的锁
一、乐观锁乐观锁,顾名思义,就是比较乐观的锁,当需要操作到共享数据时,它就认为没有其它的线程在操作该数据,态度比较乐观,乐观锁操作数据时不会上锁,在更新的时候会判断一下在此期间是否有其他线程去更新这个数据。乐观锁可以使用版本号机制和CAS算法实现。在 Java 语言中java.util.concurrent.atomic包下的原子类就是使用CAS 乐观锁实现的。适合读多写少的情况。二、悲观锁悲观锁就是和乐观锁截然不同的态度,当有一个线程操作共享数据时,它就会认为有其他线程也要和它做同样的事情,原创 2021-06-19 19:20:52 · 334 阅读 · 0 评论 -
JSTAT命令-对Java应用程序的资源和性能进行实时的监控
对于监控JVM,jdk也提供了很多工具,供我们来使用,其中命令jstat,是JDK自带的一个轻量级小工具,可以查看堆内存各部分的使用量,以及加载类的数量,对Java应用程序的资源和性能进行实时的监控,包括了对Heap size和垃圾回收状况的监控。命令行输入jstat可以查看这个命令的用法。用法格式为:jstat -<option> [-t] [-h<lin...原创 2020-03-29 13:30:44 · 408 阅读 · 0 评论 -
JVM的类加载机制和加载过程
一、虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。这就是虚拟机的类加载机制。 与那些在编译器需要进行连接工作的语言不同,在Java语言中,类型的加载和连接过程都是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但是却能为Java应用程序提供高度的灵活性,Java中可以天生动...原创 2018-06-11 11:14:19 · 241 阅读 · 0 评论 -
Java开发中用到的静态代理和动态代理
一、什么是代理? 在现实生活中,大家都对代理商不陌生,代理商就是在其行业管理范围内接受他人委托,为他人促成或缔结交易的一般代理人。而在Java编程中,代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象,这样就可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。简单来说就是你想要做的事情我替你来完成,并且在完成你的事情的同时,我还可以...原创 2018-06-14 10:06:30 · 471 阅读 · 0 评论 -
Java对变量操作相关的主内存和工作内存
Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量,不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值得传递均需要通过主内存来实现。线程、主内存和...转载 2018-06-07 16:20:34 · 1364 阅读 · 0 评论 -
JMM与并发相关的三个特性:原子性、可见性和有序性
一、原子性(Atomicity)由Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个,我们大致可以认为基本数据类型的访问读写是具备原子性的,如果应用场景需要一个更大范围的原子性保证,Java内存模型还提供了lock和unlock操作来满足这种需求,尽管虚拟机未把lock和unlock操作直接开放给用户使用,但是却提供了更高层次的字...原创 2018-09-18 11:14:39 · 1374 阅读 · 0 评论 -
JVM调优之常用参数配置
一、堆设置-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3...原创 2018-09-14 13:54:46 · 5330 阅读 · 1 评论 -
JDK自带的命令行工具
一、jps:JVM Process Status Tool,显示指定系统内所有的虚拟机进程。jps的用法:jps工具主要选项:-q:只输出JVMID,省略主类的名称-m:输出虚拟机进程启动时传递给主类main()函数的参数-l:输出主类的全名,如果进程执行的是Jar包,输出Jar路径-v:输出虚拟机进程启动时JVM参数 二、jstat:JVM Statist...原创 2018-11-14 17:23:21 · 291 阅读 · 0 评论 -
JVM中各个垃圾收集器的使用场景
在以往的文章中(垃圾收集算法),我们讲述了JVM中垃圾收集算法,像标记-清除、标记-整理、复制、分代等算法,这些只是垃圾收集的方法论,今天要介绍的就是垃圾收集的具体实现---垃圾收集器。垃圾收集器主要用于堆内存中,先从一张图中看下堆中老年代和新生代所适合的垃圾收集器,JDK11出来的ZGC不在其中。Serial、ParNew、Parallel Scavenge用于新生代;CMS、Ser...原创 2018-11-23 15:04:17 · 1614 阅读 · 0 评论