本文简单说一说JVM应如何调优。 Java语言本身的成功,除了天时地利人和,JVM功不可没。 毫不夸张地说,JVM是现代软件工程最成功的案例之一。它规模庞大,代码极其复杂,但运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。 因为JVM自带GC,又有无数可以微调的参数,所以,JVM调优,现在已经被当作Java面试的必考知识点,精通JVM调优参数的童鞋,可以冠名微操小王子。 写了这么多年的Java程序,很遗憾,我迄今为止只会用两个参数:XMS和XMX,能正确写出如下启动脚本:…

2021年3月26日 0条评论 487点热度 2人点赞 李锋镝 阅读全文

最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次加载后,会长期留驻JVM,直到JVM退出。这个说法,是不是正确的? 2) 在开发的一个集成平台中,需要集成类似接口的多种工具,并且工具可能会有新增,同时在不同的环境部署会有裁剪(例如对外提供服务的应用,不能提供特定的采购的工具),如何才能更好地实现? 针对上面的第2点,我们采用Java插件化开发实现。上面的两个问题,都和Java的类加载和热替换机制有关。 1. Java的类加载器和双亲委派模型 1.1 Java类加载…

2021年1月22日 0条评论 578点热度 0人点赞 李锋镝 阅读全文

一 背景知识 LINUX进程状态 LINUX 2.6以后的内核中,进程一般存在7种基础状态:D-不可中断睡眠、R-可执行、S-可中断睡眠、T-暂停态、t-跟踪态、X-死亡态、Z-僵尸态,这几种状态在PS命令中有对应解释。 D (TASK_UNINTERRUPTIBLE),不可中断睡眠态。顾名思义,位于这种状态的进程处于睡眠中,并且不允许被其他进程或中断(异步信号)打断。因此这种状态的进程,是无法使用kill -9杀死的(kill也是一种信号),除非重启系统(没错,就是这么头硬)。不过这种状态一般由I/O等待(比如磁…

2020年10月9日 0条评论 579点热度 0人点赞 李锋镝 阅读全文

命令格式 jmap [ options ] pid jmap [ options ] executable core jmap [ options ] [ pid ] server-id@ ] remote-hostname-or-IP 参数说明 pid:目标进程的PID,进程编号,可以采用ps -ef | grep java 查看java进程的PID; executable:产生core dump的java可执行程序; core:将被打印信息的core dump文件; remote-hostname-or-IP:…

2020年9月27日 0条评论 625点热度 1人点赞 李锋镝 阅读全文

概述 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/默认单位是ms毫秒] [查询次数] 注意:jdk版本是jdk1.8 详述 详细格式可以输入jstat -help命令查看: [root@root ~]# jstat -help Usage: jstat -help|-options jstat - [-t] [-h] [ []] Definitions: An option reported by the -options o…

2020年8月12日 0条评论 718点热度 0人点赞 李锋镝 阅读全文

背景 如何查看一个正在运行的Java程序中,它的某个JVM参数是否开启,具体值是多少? 正题 jps 和 jinfo jps jps是用于查看有权访问的hotspot虚拟机的进程 jps命令格式:jps [ options ] [ hostid ] [options]选项 : -q:仅输出VM标识符,不包括classname,jar name,arguments in main method -m:输出main method的参数 -l:输出完全的包名,应用主类名,jar的完全路径名 -v:输出jvm参数 -V:输…

2020年8月3日 0条评论 643点热度 0人点赞 李锋镝 阅读全文

JVM内存结构 由上图可以清楚的看到JVM的内存空间分为3大部分: 堆内存 方法区 栈内存 其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。 其中一部分是线程共享的,包括Java堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。 堆内存(Heap) Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。堆是被所有线程共享的区域,是…

2020年7月27日 0条评论 613点热度 0人点赞 李锋镝 阅读全文

思考一下 学习一项知识总该知道为什么学习吧。有人会说,这些写代码好像又用不上,貌似所有的事情JVM都替我们做好了。那就,思考一下为什么要学习JVM虚拟机结构。 那你是否遇到这样的困惑:堆内存该设置多大?OutOfMemoryError异常到底是怎么引起的?如何进行JVM调优?JVM的垃圾回收是如何?甚至创建一个String对象,JVM都做了些什么? 这些疑问随着学习的深入都会慢慢得到解答,而要解决这些问题的第一步,就是先了解JVM的构成。 JVM内存结构 java虚拟机在执行程序的过程中会将内存划分为不同的数据区域…

2019年10月18日 0条评论 578点热度 0人点赞 李锋镝 阅读全文