1 java 的参数传递方式 : 都是值传递,没有指针传递或地址传递
都是传递的值副本
基本类型是直接传值的副本,
对象是传递的对象引用值的副本
Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值.
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。
( 对象包括对象引用即地址和对象的内容)
a.传递值的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址)。
b.传递地址值的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
2 Object obj = new Object();
占空间的大小是4byte(栈引用大小)+8byte(最小堆大小,记录对象的元数据)=12byte
java 在堆中分配对象时总是以8的整倍来分配空间
class obj {
int a;
boolean b;
Object o;
}
obj o =new obj(); 占空间大小4(栈引用)+4(int类型大小)+1(boolean大小)+8(空对象大小)=17
大小17 离8的倍数最接近的是24 所有总共大小为24字节
3 内存模型 :
程序计数器
栈:线程栈 本地方法栈
堆:划分三个年代: 年轻代Young Generation(一个eden区(对象在这生成),两个生存区(survivor),用于对象多次筛选,复制,减少放到年老代的可能)
年老代Old Generation: tenured N次垃圾回收后扔存活的对象,生命周期较长的对象
持久代Permanent Generation: 用于存放静态文件,如java类,方法 持久代大小通过-XX:MaxPermSize=<N>进行设置
4 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对
象可以采取不同的收集方式,以便提高回收效率。
5 垃圾回收触发的条件: 1 程序空闲时 2 堆空间不足时
回收的两种类型:Scavenge GC和Full GC
Scavenge GC清除式回收: 主要用于eden区回收,回收频率多,效率高
Full GC 对整个堆进行回收(young,tenured,permanent) 应减少这个次数
full Gc触发条件:· 年老代(Tenured)被写满
· 持久代(Perm)被写满
· System.gc()被显示调用
6 参数设置:
内存设置参数
-Xmx2040m : java堆最大可用内存
-Xms2040 : java堆初始化内存值
-Xss1024k : 每个线程栈大小,jdk5.0以后默认1M
-Xmn2g : 设置 年轻代大小 持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
JVM给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以
这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都是使用串行收集器,如果想使用
他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。
吞吐量优先的并行收集器
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -
XX:ParallelGCThreads=20
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃此值最好配置与处理器数目相等。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -
XX:MaxGCPauseMillis=100
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
n java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -
XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的
Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,
一直打开。
响应时间优先的并发收集器
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -
XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片
分享到:
相关推荐
以下是一些整理出的面试知识点和小技巧,旨在为你的求职之路提供有力的支持。 首先,了解自己的目标岗位至关重要。深入研究你申请职位的职责、技能需求以及行业动态。例如,如果你申请的是软件开发工程师,那么你...
前端开发面试的一些知识点整理
根据提供的文件内容,我们可以整理出以下关于JAVA核心知识点的信息: ### 1. JVM内存区域 - **程序计数器**:它是线程私有的区域,用于记录线程执行的字节码指令地址。当线程进行切换时,程序计数器可以记录下线程...
下面将对计算机网络的一些关键知识点进行详细阐述。 首先,计算机网络具备三个基本功能:连通性、共享性和协作性。连通性使不同地理位置的设备能够相互连接,共享性则允许网络中的资源被多个用户访问,协作性则是指...
原创,适合从java学习后转学php(文章中对php与java语法已经一些关键地方进行详细对比和解释),也适合语言入门者pph初学者,涵盖了知识点广适合面试准备
这份"JAVA核心知识点整理_分享.pdf"文档涵盖了Java技术体系的关键点,包括JVM(Java虚拟机)的深入理解,这对于任何Java开发者来说都是至关重要的。以下是根据文档内容整理的一些核心知识点: ### JVM(Java ...
自己学习Java面向对象时对知识点的整理总结,主要包括:一些关键字、权限修饰符的使用、重载、构造器、代码块、内部类、封装、继承、多态、抽象、javabean、单元测试、包装类Object类、设计模式的理解与总结。...
《吉林大学计算机网络知识点整理与历年试题解析》 在学习计算机网络的过程中,吉林大学的这份资料集合提供了全面而深入的知识点梳理以及历年考试题目的解析,对于理解和掌握计算机网络的核心概念至关重要。以下是对...
【COCOACHINA669知识点整理】 在IT领域,COCOACHINA是一个知名的中文iOS和Android开发者社区,提供了丰富的技术文章、教程和讨论,帮助开发者提升技能。669在这里可能指的是一个特定的话题或者一系列的学习资源编号...
这份"JAVA核心知识点整理"涵盖了Java语言的基础到高级概念,旨在帮助开发者全面理解并熟练掌握Java技术。以下是一些关键知识点的详细说明: 1. **基础语法**:Java的基础包括变量、数据类型(如整型、浮点型、字符...
"东北石油大学web期末考试知识点整理" 本文档对东北石油大学web期末考试知识点进行了整理,涵盖了Web窗体处理流程、ASP.NET页面生命周期、事件处理、数据绑定和验证等重要知识点。 Web窗体处理流程 当客户端发起...
单片机知识点整理(高级) 一、单片机知识点整理 单片机知识点整理是指对单片机的各个方面的知识点进行整理和总结。本文将对单片机的知识点进行详细的整理和概括。 1. MCU 的概念和分类 MCU(Micro Controller ...
以下是对高等数学一些核心知识点的详细解释: 1. **函数的定义**:函数是数学中的一种基本构造,描述了两个集合之间的一一对应关系。定义1强调了每个自变量x在定义域内有唯一确定的因变量y。定义2扩展了这个概念,...
在这个名为"Python知识点整理.zip"的压缩包中,我们找到了一个名为"Python知识点整理.pdf"的文档,它很可能包含了Python语言的核心概念、常用库和实战技巧。下面,我们将对Python的一些关键知识点进行详细的阐述。 ...
以下是一些关于C++的关键知识点: 1. 高级语言的优势:高级语言如C++与低级语言相比,提供了更高的抽象层次,使得程序员可以专注于问题解决而不是硬件细节。高级语言的代码更具可读性和可移植性,降低了出错的可能...
但我可以根据标题和描述中提供的信息,结合C++这门编程语言的基础知识点,进行一次详尽的知识点整理和说明。 首先,C++是一种广泛使用的编程语言,它在计算机科学和软件开发领域扮演着重要的角色。C++的设计兼顾了...
"机械设计重要知识点整理.rar"这个压缩包文件很可能是对这一领域核心知识的系统性总结。下面,我们将深入探讨其中可能包含的一些关键知识点。 1. 机械原理:这是机械设计的基础,包括力的分析、静力学、动力学、...