jvm

JMeter5.2.1适配高分辨率

拈花ヽ惹草 提交于 2020-02-26 17:13:00
以27寸4K分辨率,Windows10为例,设置如下: 1、修改jmeter.bat文件,增加如下配置 set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.controlFont=Dialog-32 set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.systemFont=Dialog-32 set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.userFont=SansSerif-20 set JVM_ARGS=%JVM_ARGS% -Dswing.plaf.metal.smallFont=SansSerif-20 2、修改jmeter.properties文件,放开以下配置 jmeter.hidpi.mode=true jmeter.hidpi.scale.factor=2.0 jmeter.toolbar.icons.size=32x32 jmeter.tree.icons.size=32x32 jsyntaxtextarea.font.family=consolas jsyntaxtextarea.font.size=30 设置完成后重启,到此我的除了消息体数据字体没有生效之外其他的图标,菜单已经适配了高分辨率。 接下来最重要的让消息体数据字体适配

如何优雅的学习JVM,升华篇(三)

为君一笑 提交于 2020-02-26 15:51:16
此次内容和大家分享JVM中关于垃圾回收(Garbage Collect)的相关知识。 一、如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。 注意: 如果A、B两个对象互相持有引用,会导致永远不能被回收。 1.2 可达性分析 通过GC Root的对象,可以开始向下寻找,看某个对象是否可达。 可以作为GC Root:类加载器、Thread、虚拟机栈的本地变量表、静态成员、常量引用、本地方法栈的变量等。 二、垃圾回收算法 2.1 标记-清除(Mark-Sweep) 标记(Mark) 找出内存中需要回收的对象,并把它们标记出来。此时堆中所有的对象都会被扫描一遍,从而才能确定需要回收的对象,比较耗时。 清除(Sweep) 清除掉被标记需要回收的对象,释放出对应的内存空间。 不足 1、标记和清除两个过程都比较耗时,效率不高 2、会产生大量的不连续的内存碎片,空间碎片太多可能会导致在以后程序运行的过程中需要分配较大的对象时,无法找到足够的连续内存而不得不提前触发一次垃圾回收动作。 2.2 复制(Copying) 将内存划分为两块相等的区域,每次只使用其中一块,如下图 当其中一块内存使用完了,就将还存活的对象复制到另一块上面

JVM的并发问题

你说的曾经没有我的故事 提交于 2020-02-26 15:18:34
Java内存模型 1.程序,进程,线程的基本概念?   1.程序:是指完成某一项任务的代码序列(静态的概念)   2.进程:程序在某些数据上的一次运行(动态概念)   3.线程:一个进程可能包含一个或者多个线程(占有资源的独立单元) 2.JVM的内存区域?         JVM内存模型 VMstack    1.方法区: 主要存储类信息(通过classLoader:类加载器加载进来的),常量信息,使用static关键字修饰的属性,方法,代码块 等。当使用反射原理进行类加载时其实就是调用的方法区的数据。( 信息共享 )    2.Java堆区: 主要存放实例对象,当使用new关键字创建一个对象的时候,就会把相关信息放在堆区域,所以这也是GC活动的主要区域,同时也是发生OOM(内存溢出)的主要区域。( 信息共享 )    3.VMstack(虚拟机栈): Java方法运行的内存模型,在VMstack中,每一个方法都有唯一的一个栈帧与之对应,存放这个方法的一些私有信息,比如:局部变量,引用类型数据的地址,操作数栈等...。因为是存储一个方法的信息,所有 不能实现数据共享 ,是 私有 的。    4.PC(程序计数器): 是Java的私有数据,这个数据就是执行下一条指令的地址。( 私有的 )    5.Native method stack(本地方法栈): 与JVM的native。(

JVM 参数详解

人盡茶涼 提交于 2020-02-26 14:12:03
转载: JVM 参数详解 JVM 参数详解 2018年05月28日 15:48:45 阅读数:109更多 个人分类: JVM -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”是一柄双刃剑,用的好攻无不克,用的差讲带来麻烦。如何合理利用不稳定参数一直是一个不断实践不断改善的过程,无法用统一的标准去衡量。一切都需要在系统的不断运行,问题不断出现,参数不断修改,重新不断运行的循环过程中完善。也就是说没有最好的配置标准,只有适合当前系统的标准。这是一个循序渐进的过程。但有一些前人总结过得经验教训可供我们来参考,并去寻找适合自己的那些配置。 本节着重展示常用的-XX 类型参数列表及作用,不稳定参数的优化会在JVM 优化部分详细讲解。 常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden

JVM指令重排问题总结

岁酱吖の 提交于 2020-02-26 08:25:48
为什么会发生指令重排: 计算机内存操作速度远慢于CPU运行速度所以就带来的CPU空置的问题,虚拟机会按照自己的一些规则会跳过执行慢的代码,去执行快的代码,从而提升jvm的整体性能。 加锁并不能防止指令重排: 典型的单例双重锁模型,就会发生空指针异常,这个可以证明这个结论。 volatile关键字 设计的三个特征是:线程可见、不具备原子性、禁止指令重排, volatile 的读性能消耗与普通变量几乎相同,但是写操作稍慢,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。 变量依赖 : 编译器将不会对存在数据依赖性的程序指令进行重排,这里的依赖性仅仅指单线程情况下的数据依赖性;多线程并发情况下,此规则将失效。 来源: oschina 链接: https://my.oschina.net/u/4124756/blog/3165255

Logging in Clojure

心已入冬 提交于 2020-02-26 05:38:34
问题 For Java development, I use Slf4j and Logback. Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.debug("Hello world."); How to use these two libs in Clojure programs? Majority of Clojure programming doesn't has .class concept (possible of course via AOT). What do you use for logging in Clojure? 回答1: Clojure comes with a logging core library in tools.logging . Add [org.clojure/tools.logging "0.2.3"] to your leiningen project.clj and run $lein deps as usual. Once you use the

Logging in Clojure

↘锁芯ラ 提交于 2020-02-26 05:38:11
问题 For Java development, I use Slf4j and Logback. Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.debug("Hello world."); How to use these two libs in Clojure programs? Majority of Clojure programming doesn't has .class concept (possible of course via AOT). What do you use for logging in Clojure? 回答1: Clojure comes with a logging core library in tools.logging . Add [org.clojure/tools.logging "0.2.3"] to your leiningen project.clj and run $lein deps as usual. Once you use the

什么是JVM?一文简谈运行机制及基本原理!

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-26 02:02:50
JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机。 JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统“听”,告诉它我们的程序需要做什么操作。 我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是Java能一次编译,到处运行的原因。 JVM的生命周期 JVM在Java程序开始执行的时候,它才运行,程序结束的时它就停止。 一个Java程序会开启一个JVM进程,如果一台机器上运行三个程序,那么就会有三个运行中的JVM进程。 JVM中的线程分为两种:守护线程和普通线程 守护线程是JVM自己使用的线程,比如垃圾回收(GC)就是一个守护线程。 普通线程一般是Java程序的线程,只要JVM中有普通线程在执行,那么JVM就不会停止。 权限足够的话,可以调用exit()方法终止程序。 JVM的结构体系 JVM的启动过程 1、JVM的装入环境和配置 在学习这个之前,我们需要了解一件事情,就是JDK和JRE的区别。 JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境

java.lang.OutOfMemory总结分析

白昼怎懂夜的黑 提交于 2020-02-26 01:29:00
OOM浅析 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识。参照网上的一些解决方案,在这里加以整理。 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域: Permanent Generation space(永久 保存区域) 、Heap space(堆区域)、Java Stacks(Java栈)。 永久保存区域 主要存放Class(类)和Meta的信息,Class第一次被Load的时候被放入PermGen space区域,Class需要存储的内容主要包括方法和静态属性。 堆区域 用来存放Class的实例(即对象),对象需要存储的内容主要是非静态属性。每次用new创建一个对象实例后,对象实例存储在堆区域中,这部分空间也被jvm的垃圾回收机制管理。 Java栈 跟大多数编程语言包括汇编语言的栈功能相似,主要基本类型变量以及方法的输入输出参数。Java程序的每个线程中都有一个独立的堆栈。 容易发生内存溢出问题的内存空间包括:Permanent Generation space和Heap space。 第一种OutOfMemoryError: PermGen

How to set JVM parameter values in a java program

筅森魡賤 提交于 2020-02-25 23:52:12
问题 I have a long list of JVM parameter values: -XX:+UseSerialGC -XX:+ResizePLAB -XX:-ResizeOldPLAB -XX:-AlwaysPreTouch -XX:-ParallelRefProcEnabled -XX:+ParallelRefProcBalancingEnabled -XX:+UseTLAB -XX:-ResizeTLAB -XX:-ZeroTLAB -XX:-FastTLABRefill -XX:+NeverActAsServerClassMachine -XX:-AlwaysActAsServerClassMachine -XX:+UseAutoGCSelectPolicy -XX:+UseAdaptiveSizePolicy -XX:+UsePSAdaptiveSurvivorSizePolicy -XX:-UseAdaptiveGenerationSizePolicyAtMinorCollection -XX: