【JVM】JVM之类加载器

Java 发表评论
一、前言   首先,小小测试,看是否已经掌握了JVM类加载的过程   1.1、测试一 class Singleton { private static Singleton sin = new Singleton(); public static int counter1; public static int counter2 = 0; private Singleton() { counter1++; counter2++; } public static Singleton getInstance() { return sin; } } public class Test { public static void main(String[] args) { Sing…

jvm的组成和jvm垃圾回收算法

Java 发表评论
jvm由哪些部分组成? 四部分组成: 类加载器:在jvm启动的时候或类运行时需要的字节码文件加载到jvm中 执行引擎:执行引擎的任务是负责执行class文件中包含的字节码指令,相当于实际机器的cpu 内存区:将内存划分为若干个区模拟实际机器的存储,记录和调度模块。 本地方法调用c或c++实现的本地调用方法的代码返回结果。 类加载器是什么? 顾名思义,就是加载java类到虚拟机中,一般来说java源程序在…

了解JVM及JVM调优

Java 发表评论
查看自己设置的jvm参数java -XX:+PrintCommandLineFlagsidea日志C:\Users\Lenovo\.IntelliJIdea2018.1\system\log查看idea的参数配置 在help 里的custom vm options# custom IntelliJ IDEA VM options-Xms128m-Xmx750m-XX:ReservedCodeCacheSize=240m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUPolicyMSPerMB=50-ea-Dsun.io.useCanonCaches=false-Djava.net.preferIPv4Stack=true-XX:+HeapDumpOnOutOfMem…

【JVM】5、JVM内存管理机制

Java 发表评论
转自:http://blog.csdn.net/lengyuhong/article/details/5953544 近期看了看Java内存泄露的一些案例,跟原来的几个哥们讨论了一下,深入研究发现JVM里面还是有不少以前不知道的细节,这里稍微剖析一下。先看一看JVM的内部结构——如图所示,JVM主要包括两个子系统和两个组件。两个子系统分别是Class loader子系统和Execution engine(执行引擎) 子系统;两个组件分别是Runtime data area (运行时数据区…

JVM调优---JVM内存模型

Java 发表评论
1.程序计数器:用于下一条运行的指令。当线程数超过CPU数量时,线程之间根据时间 片轮询抢夺CPU资源。每一个线程都必须用一个独立的程序计数器2.JVM栈:和java线程在同一时间创建,它保存方法的局部变量,部分结果,并参与方法的调用和返回。3.本地方法栈: 管理本地方法的调用。本地方法并不是用Java实现的,是用C。4.Java堆:几乎所有的对象和数组都是在堆中分配空间。5.方法区(永久区):是被JVM中…

单例模式讨论篇:单例模式与垃圾回收

        Jvm的垃圾回收机制到底会不会回收掉长时间不用的单例模式对象,这的确是一个比较有争议性的问题。将这一部分内容单独成篇的目的也是为了与广大博友广泛的讨论一下这个问题。为了能让更多的人看到这篇文章,请各位博友看完文章之后,点一下“顶”,让本篇文章排名尽量的靠前。笔者在此谢过。 讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收。         首先说一下为什么会…

一张图看懂Java虚拟机内存区域模型

Java 发表评论
Java虚拟机内存区域总结Java虚拟机相当于一个抽象的计算机操作系统, 其管理的内从区域大体上可以分为栈和堆,就像c或c++中对内存的分类一样, 但这样的分类对于Java虚拟机来说太过粗浅, 实际上Java虚拟机管理的内存区域分为程序计数器、虚拟机栈、本地方法栈、堆和方法区, 根据各区域是属于线程私有还是由线程共享,这些区域可以分为两类,下面分别进行说明。线程私有的内存区域程序计数器(Progra…

linux解决java内存溢出问题总结

Java 发表评论
最近项目中遇到内存溢出问题,随着程序的运行,内存只增不减,最终达到系统内存最大值,总结了一下解决此问题的过程 1,top 查看java程序的pid 2,jmap -histo:live pid > pid.txt  此命令可以查看当前java程序中内个对象的数量和占用空间 ps:也可以通过jmap -histo pid | head -n10 查看前10行的值 通过查看获取到[C代表Char ,从此图可以看到当前String占用很多 3,上图还是分析不出来哪个对象占…

fullgc问题解决:Full GC (Metadata GC Threshold)

Java 发表评论
#问题描述 在工作过程中,遇到一个问题:Tomcat在重启或者发布的时候,会有多次的full GC。 笔者使用的版本说明: Tomcat7.0.25 JDK8 首先排查JVM的问题,就要把GC日志打开 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 重启Tomcat服务器,发现gc日志如下: 原因描述 通过GC日志可以看到,old区离最大配置…

Java 面试问题汇总

    面试问题汇总 2019.4月份 ​​ ​​ Java问题汇总 jvm加载类的机制 Jvm是通过classLoader来加载java类文件,jvm会把java中的类加载到内存中去,通过jvm中的解析器把类文件解析成要执行的汇编语言,java中有三大类:1系统类、2扩展类、3程序员定义的类 jvm内存调优相关问题 stackOverflow异常 一般什么情况下出触发的? 一般是栈内存中的局部变量过爆,导致内存溢出。出现递归方法,参数过多,递增过深…

Springboot 启动JAVA -JAR参数设置

1.-Dspring.profiles.active=dev 这个可以在spring-boot启动中指定系统变量,多环境(测试、预发、线上配置)的区分 2. jvm堆设值: -Xmx3550m -Xms3550m -Xmn2g -Xss128k 3.-client,-server 这两个参数用于设置虚拟机使用何种运行模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。相反,server模式启动比client慢,但可获得更高的运行性能。 在 windo…

类加载器的父委托机制

Java 发表评论
类加载器   类加载器用来把类加载到Java虚拟机中。   类加载器的类型   有两种类型的类加载器:   1.JVM自带的加载器:     根类加载器(Bootstrap)     扩展类加载器(Extension)     系统类加载器(System)   2.用户自定义的类加载器:     java.lang.ClassLoader的子类,用户可以定制类的加载方式。   JVM自带的加载器   Java虚拟机自带了以下几种加载器。   1.根(Boots…

Java并发基础之CAS操作

Java 发表评论
什么是CAS CAS是Compare And Swap的缩写,翻译成中文为比较并交换。java.util.concurrent包完全建立在CAS的基础之上,是由Java虚拟机提供的一种同步原语,实现了一种区别于synchronize同步锁的乐观锁。 在CAS操作中,涉及到三个值:内存值A,旧的预期值B,要修改的新值C。当且仅当预期值B和内存值A相同时,将内存值A修改为C,否则什么都不做,一般CAS都要配合无限while循环操作,不断的尝试知道修改…

用JMX对Resin内存状态进行监控

Java 发表评论
通过JMX我们可以轻松的实现对JVM的监控,运行jdk/bin目录下的jconsole程序,你就可以看到本地所有可监控的JVM实例。 JMX参数作用的是JVM,对任意JAVA程序都是适用的,举例如: java -Xdebug -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=10000 -Djava.rmi.server.hostname=192.169.100.159 如果想监控resin服务…

一个内存报警问题总结

JVM , 发表评论
查看当时的FULL GC从图上面看已经很频繁 打印dump文件 执行命令:jmap -dump:format=b,file=/export/Logs/anycall.jd.local/HeapDump.bin  然后通过Eclipse Memory Analyzer查看,如下图,2.9G 占据了大部分,我们最主要的是看到底哪些类撑爆了内存, 继续往下走,查看dominator_tree,如下图:可以看到蓝色阴影部分,是在errror日志打印的时候输出的内容。 这部分问什么会造成内存回收的问题呢,看…