JVM虚拟机参数介绍
JVM参数大全
参数名称
含义
默认值
-Xms
初始堆大小
物理内存的1/64(<1GB)
默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
-Xmx
最大堆大小
物理内存的1/4(<1GB)
默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn
年轻代大小(1.4or lator)
注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize
设置年轻代大小(for 1.3/1.4)
-XX:MaxNewSize
年轻代最大值(for 1.3/1.4)
-XX:PermSize
设置持久代(perm ...
markdown语法介绍
1 标题123456# 这是一级标题## 这是二级标题### 这是三级标题#### 这是四级标题##### 这是五级标题###### 这是六级标题
这是一级标题这是二级标题这是三级标题这是四级标题这是五级标题这是六级标题2 字体1234**这是加粗的文字***这是倾斜的文字*`***这是斜体加粗的文字***~~这是加删除线的文字~~
这是加粗的文字这是倾斜的文字`这是斜体加粗的文字这是加删除线的文字
3 引用123>这是引用的内容>>这是引用的内容>>>>>>>>>>这是引用的内容
这是引用的内容
这是引用的内容
这是引用的内容
4 分割线1234-------********
5 图片123![图片alt](图片地址 ''图片title'')实例:![微信公众号](https://jums.club/images/wechataccount.jpg)
6 超链接1234[显示的名字](链接地址) ...
java垃圾回收算法介绍
1 垃圾回收算法
标记算法
该算法分成两步完成:
在java程序运行过程中,当有些对应没有被gc root所引用时,那么该对象就会被标记。
当标记完之后,那些被标记的对应,就会被清除掉,也就是释放内存。释放之后,会那段内存的起始位置加入到内存的空内存地址库。当再有新对象被创建时,首先会查找地址库中的内存块是否有符合条件(内存大小是否够用)的,如果有,就将其分配给新对象,否则就另外开辟一段。
优点:
清理速度很快
只需要将被标记的对象的起始地址记录下来,就可以完成清理工作,所以速度很快
缺点:
容易产生内存碎片
从上图中可以看到,由于很多被释放掉的对象都是穿插着的,所以很难有一块完整的空内存,有时候总的空内存是足够分配给一块新的需要大内存的对象的,但是由于非常零碎,所以没办法利用。
标记整理
该算法还是分两步:
首先第一步和标记算法一样,都是先给没有被gc root引用的对象进行标记
这一步,该算法做了一个整理的操作:也就是将一些还在被gc root引用的对象向前移动,这里的移动包括数据,以及一些引用的地址,都需要做修改,所以这一步 ...
java基础知识介绍
1 打印信息打印信息,在System.out下面,主要有:
print:标准输出,但是不会换行
printf:可以使用类似C语言中的语法,进行格式化输出,即:printf("%s", prama),printf也不会换行
println:输出完之后,会自动换行
代码:
12345678public class BasicDemo { public static void main(String[] args) { //输出 System.out.printf("%s", new Integer(1)); System.out.println("hello world."); System.out.print("hello world."); }}
运行结果:
2 循环控制结构2.1 for循环
方式1:for(int i=0;i<length;i++)
1234567891 ...
JVM中的直接内存
1 定义
直接内存并不属于JVM的内存结构,它是物理机的内存,但是JVM虚拟机可以调用该部分内存。
直接内存的使用:
常见于NIO,用于数据缓冲区
分配回收的代价较高,但是速度很快
不收JVM内存回收管理
2 正常IO读取
从上图的结构图中,我们可以看到,当java程序需要读取文件时,首先会在java堆内存中new一个缓冲区,然后系统内存从磁盘中读取文件,再然后在将系统缓冲区中的字节流复制到java堆内存的缓冲区中,然后在由java程序调用。
这样做有一个缺点,就是需要开启两块内存,效率会很低。
3 直接内存读取
从图中可以看到,当java程序使用直接内存时,首先java程序在系统内存中分配一块直接内存块,这一内存块是系统内存和java堆内存可以共享的,那么系统内存读取到的磁盘文件就可以直接由java堆内存使用,这样就省去了复制的操作,大大节约了时间开销。
4 直接内存分配内存通过java中的unsafe对象分配一块直接内存,直接内存大小在分配时指定。直接内存由于不受JVM的管理,所以直接内存的释放,必须主动调用unsafe对象进行释放,才能将直接内存释放。 ...
typora使用快捷键
1 下载下载链接
2 快捷键
加粗: Ctrl + B
斜体:Ctrl + I
下划线:Ctrl + U
代码:Ctrl + Shift + `
删除线:Alt + Shift + 5
超链接:Ctrl + K
图片:Ctrl + Shift + I
标题:Ctrl + 数字 (代表生成几级标题)
引用: Ctrl + Shift + Q
无序列表: * + 空格 (需另起一行)
有序列表:
分割线: 三个 -
回到顶端:Ctrl + Home
回到底部:Ctrl + End
写在最后欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
JVM的内存结构简介
1 JVM结构图
2 栈内存
栈内存是由编译器自动分配的内存。栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
每个java程序线程运行时,JVM都会给该java线程分配一个java栈,不同的java线程,会拥有不同的java栈。所以,栈是线程私有的,不同的线程之间中的栈的数据是不能共享的。
栈中存放的数据包括:当前线程声明的基本数据变量,对象的引用变量等。如:int a = 0;,在例子中,变量名a就存放在栈中,数值0存放在常量池中。
栈内存溢出的情况:在java程序中,栈内存溢出,主要出现在递归程序中,如果递归结束的条件设置错误,那么就容易造成栈内存溢出。如下面这段代码:
12345678910public class JvmTest { private int i = 0; public void a(){ System.out. ...
java中5种引用:强引用,弱引用,虚引用,软引用,终接器引用
参考文章
1 强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。
在java程序中,一般由Object object = new Object();定义的object就是一个强引用,也就是说object强引用new Object()对象。这种情况下,也就是说明,该对象是程序中必不可少的一部分,当程序遇到内存不足时,jvm并不会将其释放,而是会抛出一个OutOfMemoryError异常。如下面这段代码:
1234567891011public class StackDemo { private static int _10M = 1014 * 1024 * 10;//这是一个10M的字节空间 private int i = 0; public static void main(String[] args) { List<byte[]> list = new ArrayList<>(); for (int i = 0;i & ...
如何通过Xshell,SSH命令连接vmware中的centos虚拟机
1 VmWare中的三种连接方式原文:https://blog.csdn.net/shuxiao9058/article/details/7051463
1.1 桥接模式
使用VMnet0虚拟交换机,此时虚拟机相当与网络上的一台独立计算机与主机一样,拥有一个独立的IP地址,其网络拓扑如下图所示,使用桥接方式,A,A1,A2,B可互访
1.2 主机模式(Host-Only)
使用Vmnet1虚拟交换机,此时虚拟机只能与虚拟机、主机互访。也就是不能上Internet,其网络拓扑如下图所示,使用Host方式,A,A1,A2可以互访,但A1,A2不能访问B,也不能被B访问。
1.3 NAT模式
使用Vmnet8虚拟交换机,此时虚拟机可以通过主机单向网络上的其他工作站,其他工作站不能访问虚拟机。其网络拓扑如下图所示,使用NAT方式,A1,A2可以访问B,但B不可以访问A1,A2。但A,A1,A2可以互访。
2 使用桥接模式连接原文:https://blog.csdn.net/vicoqi/article/details/79951236
2.1 查看物理机IPwindow ...
redis安装报错:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
1 Linux下安装redis
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17.tar.gz
如果没有安装gcc,则使用该命令安装,yum install gcc,如果安装了gcc,执行第5步
make
2 错误在执行make命令时,出现下面的错误:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
3 原因分析
说关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。
原文:https://blog.csdn.net/bugall/artic ...