Jvm
文章平均质量分 60
Cloud_N
这个作者很懒,什么都没留下…
展开
-
Jvm内存溢出
总结 遇到内存溢出的问题,可以使用jdk/bin下的javaVisualVM工具分析堆快照,使用之前要先在jvm上加上参数XX:+HeapDumpOnOutofMemoryError,这样就会在程序崩溃的时候,产生一份堆内存快照。 对象是存放在堆中的。而调用方法的时候,会在栈中入栈一个栈帧。 概述 jvm中除了程序计数器,其他的区域都有可能会发生内存溢出 内存溢出是什么?转载 2017-10-03 21:41:57 · 325 阅读 · 0 评论 -
双亲委派模型和线程上下文类加载器
最近在读《架构探险-从零开始写java web框架》一书时,看到了一个获取类加载器的地方是这样写的: public static ClassLoader getClassLoader() { return Thread.currentThread().getContextClassLoader(); }/** * 加载类 *原创 2018-01-05 19:49:31 · 904 阅读 · 0 评论 -
关于值传递和引用传递
踩到坑了 值传递和引用传递并非字面上的意思,两者的唯一区别是在传参是是否传入参数的副本。值传递会传入参数副本,而引用传递将会传入参数的原始值。因为“引用传递”并不是传递过去一个引用,而是传递过去对象本身,这个词确实很绕,也产生了很多误解。不过只要了解了jvm的内存结构,就会清楚java其实是按值传递的。 public static void main(String[] args){原创 2018-01-06 10:15:31 · 192 阅读 · 0 评论 -
jvm gc参数分析
原文:http://hi.baidu.com/i1see1you/item/295c1dc81f91ab55bdef69e5gc日志分析工具: http://qa.blog.163.com/blog/static/19014700220128199421589/Java GC 日志图解: http://www.chinasb.org/archives/2012/09/4921.shtml 概述ja...转载 2018-03-17 11:08:12 · 219 阅读 · 0 评论 -
Java8获取运行时方法参数
jdk1.8之前reflect没有提供直接读取运行时方法参数的api。java8提供了Method.getParameters() 和parameter.getName()的api,但必须设置编译器的-parameter参数才能获取到正确的参数名称,而不是arg0,arg1这种格式,而且要注意一定要使用javac编译器。除此之外,该参数在jdk1.8.0上似乎不起作用,原因未知,可以使用jdk1....原创 2018-04-18 10:46:52 · 2123 阅读 · 1 评论 -
线上问题排查:cpu100%
简单记录下排查过程 1.top找到tomcat进程 2.假设把cpu吃满的tomcat进程pid是20172,ps -mp 20172 -o THREAD,tid,time查看线程情况,找到把cpu吃满的线程 3.上图中的TID需要转成16进制,可以用printf "%x\n",假设把cpu吃满的TheaddId为20174 4.然后用jstack 20172|grep 4e...原创 2018-09-19 14:29:31 · 455 阅读 · 0 评论 -
线程上下文类加载器
前言 此前我对线程上下文类加载器(ThreadContextLoader)的理解仅仅局限于下面这段话: Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。 这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为...转载 2018-05-05 16:44:17 · 157 阅读 · 0 评论 -
java8获取参数名称API
在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。现在,Java 8开始在class文件中保留参数名,给反射带来了极大的便利。 示例: public class GetRuntimeParameterName { public void createUser(String name, int...转载 2018-04-17 20:52:47 · 381 阅读 · 0 评论