page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6252 次

3096 个回答

0 赞同

为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?

1. 从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。 2. 堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的...

回答于 2022-01-27 14:06

0 赞同

Java 中的参数传递时传值呢?还是传引用?

1. 不要试图与 C 进行类比,Java 中没有指针的概念。 2. 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题。不会直接传对象本身。 Java 在方法调用传递参数时,因为没有指针,所以它都是进行传值调用。但是传引用的错觉是如何造成的呢?在运行栈中,基本类型和引用的处理是一样的,都...

回答于 2022-01-27 14:05

0 赞同

Java 对象的大小是怎么计算的?

基本数据的类型的大小是固定的。对于非基本类型的 Java 对象,其大小就值得商榷。在 Java 中,一个空 Object 对象的大小是 8 byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个 Java 对象的生命,但是它所占的空间为:4 byte + 8 byte。4 byte 是...

回答于 2022-01-27 13:57

0 赞同

Java 对象的大小是怎么计算的?

基本数据的类型的大小是固定的。对于非基本类型的 Java 对象,其大小就值得商榷。在 Java 中,一个空 Object 对象的大小是 8 byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个 Java 对象的生命,但是它所占的空间为:4 byte + 8 byte。4 byte 是...

回答于 2022-01-27 13:53

0 赞同

对象的访问定位的两种方式?

Java 程序通过栈上的引用数据来操作堆上的具体对象。目前主流的对象访问方式有:句柄 和 直接指针。 1. 使用句柄 如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,引用中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型 数据各自的具体地址信息。 2. 直接指针 如果使用直接指针访问,...

回答于 2022-01-27 13:52

0 赞同

判断垃圾可以回收的方法有哪些?

垃圾收集器在对堆区和方法区进行回收前,首先要确定这些区域的对象哪些可以被回收,哪些暂时还不能回收,这就要用到判断对象是否存活的算法。 1、引用计数法 基本思想 引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,就将该对象实例分配给一个变 量,该变量...

回答于 2022-01-27 13:51

0 赞同

垃圾回收是从哪里开始的呢?

查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进行程序执行地方,所以要获取哪些对象正在被使用,则需要从 Java 栈开始。同时,一个栈是与一个线程对应的,因此,如果有多个线程的话,则必须对这些线程对应的所有的栈进行检查。 同时,除了栈外,还有系统运行时的寄存器等,也是存储程序运行...

回答于 2022-01-27 13:48

0 赞同

被标记为垃圾的对象一定会被回收吗?

即使在可达性分析算法中不可达的对象,也并非是“非死不可”,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记 过程。 第一次标记:如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链,那它将会被第一次标记; 第二次标记:第一次标记后接着会进行一次筛选,筛选的条件是此对象是...

回答于 2022-01-27 13:47

0 赞同

如何创建线程池?

通过 Executor 框架的工具类 Executors 来实现: 我们可以创建三种类型的 ThreadPoolExecutor: 1、FixedThreadPool:该方法返回一个固定线程数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便...

回答于 2022-01-26 16:20

0 赞同

线程池中的的线程数一般怎么设置?需要考虑哪些问题?

1. 线程池中线程执行任务的性质: 计算密集型的任务比较占 cpu,所以一般线程数设置的大小 等于或者略微大于 cpu 的核数;但 IO 型任务主要时间消耗在 IO 等待上,cpu 压力并不大,所以线程数一般设置较大。 2. cpu 使用率: 当线程数设置较大时,会有如下几个问题:第一,线程的初始化,切换,销毁等操作会消耗不小的 c...

回答于 2022-01-26 16:20