jvm
文章平均质量分 54
jvm
車輪の唄
atarik@163.com
展开
-
JVM GC算法
高吞吐量较好因为这会让应用程序的最终用户感觉只有应用程序线程在 "生产性工作",直觉上,吞吐量越高程序运行越快低暂停时间(低延迟)较好因为最终用户的角度来看是GC还是其他原因导致一个应用被挂起始终是不好的。在交互式应用程序中,具有较低暂停时间非常重要在设计 GC 算法时,我们必须确定目标:一个GC算法只可能针对两个目标之一或者进行折衷现在标准: 在最大吞吐量优先的情况下,降低停顿时间。原创 2023-11-28 10:17:59 · 411 阅读 · 0 评论 -
full gc问题优化
1.如果存在大对象或者文件io,适当加大年轻代内存区大小(2G堆内存情况下上传文件频繁fgc,改成4G后解决,或者在2G堆内存时修改默认的年轻代和年老代比值)2.使用bytebuffer缓冲区3.直接使用byte...原创 2021-06-05 09:54:16 · 359 阅读 · 0 评论 -
记一次内存泄漏问题排查
现象:容器运行1-2小时后,内存逐渐上升到100%,主进程被os kill, 随后容器被重新拉起, 内存再次上升...配置信息, 容器设置的最大内存8G分析过程:1. jinfo pid打印出进程的配置信息, 进程堆内存设置为4G2. jmap -heap pid 打印出堆内内存情况 jmap -histo:live pid > tmp.txt打印每个class的实例数目,内存占用,类全名信息.VM的内部类名字开头会加上前缀”*”.如果live子参数加上后,只统计活的...原创 2021-02-06 12:33:02 · 344 阅读 · 0 评论 -
Java 中断异常的作用
一直都不太理解中断异常的作用, 直到最近遇到容器内的进程莫名被kill掉, 并且执行完整的结束进程操作. 在这个执行的过程中, 定时任务中抛出中断异常参见:https://segmentfault.com/a/1190000017480171原创 2020-09-02 19:59:16 · 302 阅读 · 0 评论 -
java程序启动参数-D
java -Dfoo="some string" SomeClass也就是说-D是用来在启动一个java程序时设置系统属性值的。如果该值是一个字符串且包含空格,那么需要包在一对双引号中。何为系统属性值呢?也就是在System类中通过getProperties()得到的一串系统属性。下面我们来写个测试方法就知道了!public class TestSystem {public static void main(String args[]) {System.out.println(.原创 2020-09-02 19:55:03 · 649 阅读 · 0 评论 -
jvm堆外内存监控
一Native Memory Trackingjava8给HotSpot VM引入了Native Memory Tracking (NMT)特性,可以用于追踪JVM的内部内存使用开启-XX:NativeMemoryTracking=summary使用-XX:NativeMemoryTracking=summary可以用于开启NMT,其中该值默认为off,可以设置为summary或者detail来开启;开启的话,大概会增加5%-10%的性能消耗查看/ # jcmd 1 VM..原创 2020-07-16 22:09:54 · 2941 阅读 · 0 评论 -
OpenJDK13 代码编译调试
环境: ubuntu18.04 + clion一, 编译1. 下载openjdk13源码2. 安装编译需要的环境依赖apt-getinstalllibfreetype6-devlibcups2-devlibx11-devlibxext-devlibxrender-devlibxrandr-devlibxtst-devlibxt-devlibasound2-d...原创 2019-12-05 11:30:11 · 541 阅读 · 0 评论 -
理解多态和RTTI
public class ChinesePerson implements Person { @Override public void say() { // TODO Auto-generated method stub System.out.println("i am chinese"); } }public class JapanPerson implements Per原创 2017-07-30 10:26:56 · 1491 阅读 · 0 评论 -
Java常量池理解与总结
一.相关概念什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。Class文件中的常量池在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主原创 2017-07-25 10:36:39 · 274 阅读 · 0 评论 -
RTTI实现原理(多态的原理)
编译类型和运行类型的概念运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。Class类Class类是"类的类"(class of classes)。如果说类是对象的抽象和集合的话,...原创 2017-09-19 17:16:29 · 1164 阅读 · 0 评论 -
运行时常量池的一些理解
public class TestCl{ static final Integer ii = 1000; private final Integer b = 1000; public static void main(String[] args) { TestCl cl = new TestCl(); System.out.println(cl.b == TestCl.ii)原创 2017-10-14 16:41:44 · 435 阅读 · 0 评论 -
final修饰的常量和jvm中的运行时常量池没有关联
Integer i = 0;String s = "0";上述两个代码都会保存在运行时常量池中而 final Integer i = 200; 只会保存在堆内存或栈内存中, final只代表这是个常量, 不允许修改, 而不代表其存储区域原创 2017-10-14 17:48:51 · 767 阅读 · 0 评论 -
重写自己的java.lang.*不能实现
答案:通常不可以,但可以采取另类方法达到这个需求。解释:为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,爸爸们能找到的类,儿子就没有机会加载。而System类是Bootstrap加载器加载的,就算自己重写,也总是使用Java系统提供的System,自己写的System类根本没有机会得到加载。但是,我们可以自己定义一个类加载器来达到这个目的,为了避免双亲委托机制,这个类加原创 2018-01-18 21:54:21 · 358 阅读 · 0 评论 -
jvisualVM 监控远程 spring boot
我们可以定义系统环境变量来表示 在/etc/profile 最后一行增加export JAVA_OPTS='-Djava.rmi.server.hostname=192.168.2.39 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.a...原创 2018-10-24 17:49:51 · 1576 阅读 · 0 评论 -
java ClassLoader类解析-双亲委托机制
做Java开发,对于ClassLoader的机制是必须要熟悉的基础知识,本文针对Java ClassLoader的机制做一个简要的总结。因为不同的JVM的实现不同,本文所描述的内容均只限于Hotspot Jvm.本文将会从JDK默认的提供的ClassLoader,双亲委托模型,如何自定义ClassLoader以及Java中打破双亲委托机制的场景四个方面入手去讨论和总结一下。JDK默原创 2017-09-19 14:28:02 · 395 阅读 · 0 评论 -
Java Thread State 分析
看到大量 Java Thread State 的第一反应是:1,线程状态为“waiting for monitor entry”:意味着它 在等待进入一个临界区 ,所以它在”Entry Set“队列中等待。此时线程状态一般都是 Blocked:java.lang.Thread.State: BLOCKED (on object monitor)原创 2017-09-13 09:29:46 · 437 阅读 · 0 评论 -
运行时常量池与Class文件常量池的区别
可以理解为:class文件常量池只是.class文件中的、静态的;而运行时常量池,是在运行时将所有class文件常量池中的东西加载进来?运行时常量池是方法区内存中的一部分,Class文件常量池是指方法区?http://hllvm.group.iteye.com/group/topic/26412#post-187861原创 2017-07-25 10:13:29 · 2325 阅读 · 1 评论 -
内部类调用局部参数为何用final关键字
public void mRun(final String name){ new Runnable() { public void run() { try { Thread.sleep(1000);原创 2017-07-24 23:20:53 · 557 阅读 · 0 评论 -
JDK内置工具使用
JDK内置工具使用一、javah命令(C Header and Stub File Generator)二、jps命令(Java Virtual Machine Process Status Tool)三、jstack命令(Java Stack Trace)四、jstat命令(Java Virtual Machine Statistics Monitoring To原创 2017-09-13 09:30:28 · 303 阅读 · 0 评论 -
Java线程Dump分析工具--jstack
stack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: jstack [-l][F] pid 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,...原创 2017-09-13 17:13:36 · 311 阅读 · 0 评论 -
类加载和实例化顺序
类实例化, 先成员变量默认初始化, 成员变量显式初始化, 执行构造函数有父子关系的类实例化, 成员变量默认初始化, 执行父类构造函数, 成员变量显式初始化, 执行子类构造函数class Fu{ Fu() { super(); show(); //通过结果可以看出,子父类有同名show方法,调用的是子类show方法。 ret原创 2017-08-09 11:18:28 · 1381 阅读 · 0 评论 -
head dump分析
主要功能概述显示jvm运行时的参数,Java版本,以及系统属性。监控显示当前这个pid的cpu,堆,PermGen,类,线程的运行情况,可以主动进行垃圾回收,以及生成此时刻的dump文件。线程显示所有线程的“实时”状态(运行,休眠,等待,监视)以及时间,(调整好刷新时间),可以通过放大,放小,更细致的观察线程的状态,以及一个线程详细的时刻状态和线程d原创 2017-09-14 09:04:18 · 4853 阅读 · 0 评论