![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA_JVM
JAVA道人
我宁愿做错,也不愿什么都不做.
展开
-
设置java.library.path不起作用
System.load(AAA)这个加载本地库的方法,会自动到System.getProperty(“java.library.path”)的地址里面去寻找AAA.dlljava.library.path里面包括一组地址,包含系统变量PATH,它必然包括%javahome%/bin,所以当我们把dll扔到%javahome%/bin下面的时候,则可以直接加载成功.但在有的情况下,我们希望dll不污染虚拟机,而是放在项目里面.那这就是动态加载库.我们可以尝试修改java.library.pathStr原创 2021-05-20 17:17:30 · 17051 阅读 · 0 评论 -
JVM监控之arthas
用了arthas之后,才发现世界上竟有如此美妙的jar包arthas,中文叫阿尔萨斯,是魔兽世界里的一个Boss吧。这是阿里巴巴开发的java监控的jar。如果你熟悉jdk内置工具的话,肯定对此等功能不陌生,但arthas也有它自己的特色。1、下载并使用arthas的使用方法之一是下载它的arthas-boot.jar,https://alibaba.github.io/arth...原创 2019-11-26 22:28:50 · 1056 阅读 · 0 评论 -
JVM监控:jmap之堆
控制台输入jmap,会得到以下信息:Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [s...原创 2019-11-25 22:41:58 · 211 阅读 · 0 评论 -
java虚拟机:监控之jstack线程
jstack <PID> 是查看某个进程的栈,这通常和jps配合一起使用。jstack <PID> >> aaa.log 是将栈保存到当前文件夹下aaa.log里原创 2019-11-25 22:33:30 · 137 阅读 · 0 评论 -
java虚拟机:监控之jps虚拟机进程
这是一个命令行的工具,不是可视化的。jps它可以显示出本机上所有的开启的虚拟机启动类。我们运行下这个类,启动后这个虚拟机就一直在运行。public class AppTest { public static void main(String[] args) throws InterruptedException { while(true){ Thread.slee...原创 2019-07-02 16:44:12 · 183 阅读 · 0 评论 -
java虚拟机 启动参数
启动参数分为两大类:稳定参数和非稳定参数稳定参数:Xms:初始堆大小Xmx:最大堆大小Xss:每条线程携带内存大小举例:下面的启动参数设置了固定堆200M,每条线程500K-Xms200M -Xmx200M -Xss500K其中Xms和Xmm在程序里可以获得Runtime runtime = Runtime.getRuntime();System.out.pr...原创 2019-07-02 16:44:05 · 652 阅读 · 0 评论 -
java虚拟机---从栈中通过引用访问对象
目前虚拟机有两种方法:1.借助句柄访问优点:GC重排时操作较少缺点:栈-----句柄-----对象,访问速度慢些2.直接访问优点:栈----对象,访问速度快些缺点:GC重排时操作较多目前sun HotSpot虚拟机使用了直接访问...原创 2019-07-02 16:44:18 · 191 阅读 · 0 评论 -
java虚拟机-------new 对象的机制
1.查找对象基本信息从永久代里得到该对象的class信息,然后会查看该class是否已经被加载或者创建对象,如果已经被加载了,那么便分配一块堆内存作为对象,并把相关class记录的信息分配到该块内存里。如果还没有被加载,那么还需要加载class信息。2.分配地址怎么分配地址,这跟虚拟机的GC策略有关。如果GC策略是重排压缩,那么在已使用过的内存和未使用过的内存中间有个指针,那么直接...原创 2019-07-02 16:44:32 · 97 阅读 · 0 评论 -
java内存分布
区域 解释 线程共享 堆 包括新生代,老生代,是对象存放区域 是 永久代 包括静态变量,全局变量class等,不回收 是 程序计数区 程序执行时的行数,用于跳转if或for等 否 栈 程序执行时局部变量 否 本地栈 native执行时局部变量,hotsport虚拟机栈和本地栈是一个 否 ...原创 2019-07-02 16:44:27 · 97 阅读 · 0 评论 -
JVM垃圾回收机制
JVM堆主要有两块:新生代和老年代,JAVA1.8后把持久代改成元空间Meta space新生代包括Eden,和两个survivor.老年代就是老年代那一块.当生成新的对象时,对象进入新生代的Eden区域,Eden满后,触发新生代GC,会对Eden和当前正在使用的survivor进行垃圾回收(如果都没有使用则任选一个即可),把这俩区域未被回收的对象全部复制到另一个survivor,然后...原创 2019-06-28 13:06:35 · 117 阅读 · 0 评论 -
堆GC策略
1.计数器法对象被引用一次,计数器+1,失去引用一次,计数器-1,如果计数器=0,则代表着可以被回收这种情况是有个严重的缺点是:如果有两个对象都没有外部引用,但是它们两个却互相引用,那么是不能被回收的。2.标记-清除法通过根对象标记所有可达的对象,然后清除其他对象.清除前:清除后:这种情况有个缺点:就是有内存碎片,不利于大对象存储.3.标记压缩法是标记清除法的变...原创 2019-06-28 13:06:43 · 107 阅读 · 0 评论 -
exec
Runtime.getRuntime().exec("");就相当于这个Runtime.getRuntime().exec("cmd","cd d://"); 相当于使用cmd的命令"cd d://"原创 2019-07-02 16:33:58 · 156 阅读 · 0 评论 -
JNI详解------完整Demo
为什么要用JNI?因为有些功能JAVA无法提供,比如对扫描仪驱动,我现在就是要搞这个,网上给的例子都是SB.我气不过,便要自己去搞.感觉很悲剧.搜来想去,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了. 什么是JNI?JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).这是百...原创 2018-08-07 12:08:22 · 70820 阅读 · 25 评论 -
System.load(String filename)和System.loadLibrary(String libname)的区别
作用:它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。其实JDK提供给用户了两个方法用于载入文件,一个是System.load(String filename)方法,另外一个是System.loadLibrary(String libname)方法。System.loadSystem.load...原创 2018-08-07 10:56:11 · 296 阅读 · 0 评论 -
javap
javap定义javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。测试类public class JavapTest { private static final int _P_1 = 1; public static final int _P_2 = 2;...原创 2018-08-10 10:52:39 · 196 阅读 · 0 评论 -
Jconcel和telnet
打开cmd键入:jconsole即可里面由关于内存/线程/类及其他的折线图其中可以在Mbean里thread中查看死锁 平常的ping是指ping ip.80而如果要指定端口,就需要用到telnet指令但是这个指令是在c:windows/system32里的,如果想用,需要配置里path变量...原创 2018-07-22 16:25:08 · 164 阅读 · 0 评论 -
JAVA环境变量的配置
1.JDK和JRE的区别 JRE是JAVA的最核心的部分,可以认为是JAVA的基础环境,包括虚拟机和java.exe(运行命令) JDK是由程序员开发的JAVA核心的组件,包括基础jar包/源码以及javac.exe(编译命令) 只有JRE是无法将java文件编译成class文件的2.JDK环境变量配置 在系统变量里配置 JAVA_HOME=C:\XX\X...原创 2018-07-22 16:23:09 · 4308 阅读 · 0 评论 -
JVM虚拟机类加载器ClassLoader
一.看前须知 1.jvm会校验class文件的完整性和准确性,然后加载到内存里. 2.那么靠谁来加载呢?就是类加载器classloader 3.classloader的定义:JVM加载class文件的工具. 4.同一个包类名且同一个类加载器加载的,是同一个类.(这意味着使用不同的加载器来加载同一个class文件,那就不是同一个类,我们会在后面去验证这个道理....原创 2018-04-12 22:46:54 · 223 阅读 · 0 评论