Skip to content

Commit 5e9c023

Browse files
committed
Fix static field collection
1 parent 58507c7 commit 5e9c023

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

jvm/src/garbage_collector.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use alloc::{boxed::Box, collections::BTreeMap, sync::Arc, vec::Vec};
22
use core::mem::forget;
3+
use java_constants::FieldAccessFlags;
34

45
use bytemuck::cast_slice;
56
use hashbrown::{hash_set::Entry, HashMap, HashSet};
@@ -61,13 +62,21 @@ fn find_reachable_objects(jvm: &Jvm, object: &Box<dyn ClassInstance>, reachable_
6162
for field in fields {
6263
let descriptor = field.descriptor();
6364

65+
if !descriptor.starts_with("L") && !descriptor.starts_with("[") {
66+
continue;
67+
}
68+
69+
let value = if field.access_flags().contains(FieldAccessFlags::STATIC) {
70+
object.class_definition().get_static_field(&*field).unwrap()
71+
} else {
72+
object.get_field(&*field).unwrap()
73+
};
74+
6475
if descriptor.starts_with("L") && descriptor.ends_with(";") {
65-
let value = object.get_field(&*field).unwrap();
6676
if let JavaValue::Object(Some(value)) = value {
6777
find_reachable_objects(jvm, &value, reachable_objects);
6878
}
6979
} else if descriptor.starts_with("[") {
70-
let value = object.get_field(&*field).unwrap();
7180
if let JavaValue::Object(Some(value)) = value {
7281
reachable_objects.insert(value.clone());
7382

0 commit comments

Comments
 (0)