How to delete an array properly in Java [duplicate] The 2019 Stack Overflow Developer Survey Results Are InDeleting an object in java?List of objects that are still referenced after gc()Is Java “pass-by-reference” or “pass-by-value”?Create ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?PHP: Delete an element from an arrayHow do I determine whether an array contains a particular value in Java?How do I declare and initialize an array in Java?How do I remove a particular element from an array in JavaScript?How to use foreach with array in JavaScript?Why is it faster to process a sorted array than an unsorted array?

Why couldn't they take pictures of a closer black hole?

How to obtain a position of last non-zero element

Accepted by European university, rejected by all American ones I applied to? Possible reasons?

How can I define good in a religion that claims no moral authority?

What do I do when my TA workload is more than expected?

I am an eight letter word. What am I?

How to translate "being like"?

ODD NUMBER in Cognitive Linguistics of WILLIAM CROFT and D. ALAN CRUSE

Straighten subgroup lattice

Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?

What do these terms in Caesar's Gallic wars mean?

Deal with toxic manager when you can't quit

How can I add encounters in the Lost Mine of Phandelver campaign without giving PCs too much XP?

How to charge AirPods to keep battery healthy?

Falsification in Math vs Science

Inverse Relationship Between Precision and Recall

What do hard-Brexiteers want with respect to the Irish border?

How do PCB vias affect signal quality?

Will it cause any balance problems to have PCs level up and gain the benefits of a long rest mid-fight?

How did passengers keep warm on sail ships?

What is this business jet?

Star Trek - X-shaped Item on Regula/Orbital Office Starbases

What is this sharp, curved notch on my knife for?

The phrase "to the numbers born"?



How to delete an array properly in Java [duplicate]



The 2019 Stack Overflow Developer Survey Results Are InDeleting an object in java?List of objects that are still referenced after gc()Is Java “pass-by-reference” or “pass-by-value”?Create ArrayList from arrayHow do I check if an array includes an object in JavaScript?How to append something to an array?PHP: Delete an element from an arrayHow do I determine whether an array contains a particular value in Java?How do I declare and initialize an array in Java?How do I remove a particular element from an array in JavaScript?How to use foreach with array in JavaScript?Why is it faster to process a sorted array than an unsorted array?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








12
















This question already has an answer here:



  • Deleting an object in java?

    7 answers



I'm 4 days old in Java and from the tutorials I've searched, the instructors focus a lot of effort in explaining how to allocate a two dimensional array (e.g.) as such:



Foo[][] fooArray = new Foo[2][3];


... but I've not found any that explains how to delete them.



From what is going on memory-wise, the variable fooArray will point to a block of memory in the heap, in which there are 2 elements. Each of the elements points to another block in the heap as well, which have 3 elements.



That being said, could I just reference the first block of elements and the garbage collector will do the job?



Foo[1] = null; and Foo[2] = null;



Or do I have to null each of the instantiated Foo elements?



Foo[1][1] = null; Foo[1][2] = null; Foo[1][3] = null; ...










share|improve this question















marked as duplicate by TT., Caleth, Mormegil, Iłya Bursov, Andrey Tyukin Apr 8 at 16:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.













  • 1





    @TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

    – Chronus
    Apr 8 at 7:38







  • 4





    Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

    – TT.
    Apr 8 at 7:49


















12
















This question already has an answer here:



  • Deleting an object in java?

    7 answers



I'm 4 days old in Java and from the tutorials I've searched, the instructors focus a lot of effort in explaining how to allocate a two dimensional array (e.g.) as such:



Foo[][] fooArray = new Foo[2][3];


... but I've not found any that explains how to delete them.



From what is going on memory-wise, the variable fooArray will point to a block of memory in the heap, in which there are 2 elements. Each of the elements points to another block in the heap as well, which have 3 elements.



That being said, could I just reference the first block of elements and the garbage collector will do the job?



Foo[1] = null; and Foo[2] = null;



Or do I have to null each of the instantiated Foo elements?



Foo[1][1] = null; Foo[1][2] = null; Foo[1][3] = null; ...










share|improve this question















marked as duplicate by TT., Caleth, Mormegil, Iłya Bursov, Andrey Tyukin Apr 8 at 16:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.













  • 1





    @TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

    – Chronus
    Apr 8 at 7:38







  • 4





    Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

    – TT.
    Apr 8 at 7:49














12












12








12


3







This question already has an answer here:



  • Deleting an object in java?

    7 answers



I'm 4 days old in Java and from the tutorials I've searched, the instructors focus a lot of effort in explaining how to allocate a two dimensional array (e.g.) as such:



Foo[][] fooArray = new Foo[2][3];


... but I've not found any that explains how to delete them.



From what is going on memory-wise, the variable fooArray will point to a block of memory in the heap, in which there are 2 elements. Each of the elements points to another block in the heap as well, which have 3 elements.



That being said, could I just reference the first block of elements and the garbage collector will do the job?



Foo[1] = null; and Foo[2] = null;



Or do I have to null each of the instantiated Foo elements?



Foo[1][1] = null; Foo[1][2] = null; Foo[1][3] = null; ...










share|improve this question

















This question already has an answer here:



  • Deleting an object in java?

    7 answers



I'm 4 days old in Java and from the tutorials I've searched, the instructors focus a lot of effort in explaining how to allocate a two dimensional array (e.g.) as such:



Foo[][] fooArray = new Foo[2][3];


... but I've not found any that explains how to delete them.



From what is going on memory-wise, the variable fooArray will point to a block of memory in the heap, in which there are 2 elements. Each of the elements points to another block in the heap as well, which have 3 elements.



That being said, could I just reference the first block of elements and the garbage collector will do the job?



Foo[1] = null; and Foo[2] = null;



Or do I have to null each of the instantiated Foo elements?



Foo[1][1] = null; Foo[1][2] = null; Foo[1][3] = null; ...





This question already has an answer here:



  • Deleting an object in java?

    7 answers







java arrays






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 8 at 7:18









Jason

9,69733545




9,69733545










asked Apr 8 at 7:07









ChronusChronus

1147




1147




marked as duplicate by TT., Caleth, Mormegil, Iłya Bursov, Andrey Tyukin Apr 8 at 16:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









marked as duplicate by TT., Caleth, Mormegil, Iłya Bursov, Andrey Tyukin Apr 8 at 16:25


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









  • 1





    @TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

    – Chronus
    Apr 8 at 7:38







  • 4





    Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

    – TT.
    Apr 8 at 7:49













  • 1





    @TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

    – Chronus
    Apr 8 at 7:38







  • 4





    Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

    – TT.
    Apr 8 at 7:49








1




1





@TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

– Chronus
Apr 8 at 7:38






@TT. although the answer is the same, my question was specific in arrays. Meaning that, even if I've read it before I asking, I would still be in doubt (from a nooby perspective)

– Chronus
Apr 8 at 7:38





4




4





Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

– TT.
Apr 8 at 7:49






Ok I hear you. Know that everything apart from primitive data types (e.g. int, double, ...) are objects. Important to know.

– TT.
Apr 8 at 7:49













3 Answers
3






active

oldest

votes


















15














Explanation



You can not explicitly delete something in Java. It is the garbage collectors job to do that. It will delete anything which is not used anymore by anyone. So either



  1. let the variable fall out of scope or

  2. assign null

  3. or any other instance to it.

Then the array instance (as well as its subarrays) is not referenced anymore and the garbage collector will delete it eventually.




References



To understand why re-assigning the outer array is enough to also delete the inner arrays, you need to understand how they are referenced. Again, the garbage collector will delete anything which is not referenced. So let's take a look at an array such as:



int[][] outer = 1, 2, 3, 4, 5, 6;


We have 4 array instances. One is of type int[][] and three of type int[]. Also, we have one variable outer. The instances are referenced as follows:



 ___> 1, 2
|
outer --> int[][] ---|---> 3, 4
|
|___> 5, 6


So by deleting outer, nobody references int[][] anymore. The garbage collector can now delete it. But that also removes all references to the inner arrays, so the garbage collector can now also delete them.



Now assume that you would reference one of the inner arrays by another variable:



int[][] outer = 1, 2, 3, 4, 5, 6;
int[] thirdInner = outer[2];
other = null; // remove the reference


The situation is now



outer --> null

___> 1, 2
|
int[][] ---|---> 3, 4
|
|______> 5, 6
|
thirdInner _______________|


So the garbage collector will now delete the outer array int[][], which also removes all references to the first and second inner array. But the third is still referenced by thirdInner, so after garbage collection we have:



outer --> null
thirdInner --> 5, 6





share|improve this answer




















  • 3





    "Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

    – Boris the Spider
    Apr 8 at 10:26











  • That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

    – Zabuza
    Apr 8 at 10:34











  • @BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

    – bwoebi
    Apr 8 at 12:25






  • 2





    "Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

    – Boann
    Apr 8 at 16:34






  • 1





    Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

    – Zabuza
    yesterday



















13














At some point after the array goes out of scope, the garbage collector will reclaim the memory if there are no other references to it.



If you want to null your reference before the variable goes out of scope (keep in mind that if some other code has this reference, it won't get garbage collected):



Foo[][] fooArray = new Foo[2][3];

...

// this will null the reference to the array
fooArray = null;





share|improve this answer




















  • 3





    Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

    – Konrad Rudolph
    Apr 8 at 9:24












  • Good point - edited.

    – Jason
    Apr 8 at 22:24


















2














Unlike C, Java provides automatic garbage collection,which will clear the array for you as it becomes unreachable(i.e goes out of scope).If you want you can make the array as null so that the memory location becomes unreachable.



 Foo[][] fooArray = new Foo[2][3];
.
.
.
fooArray = null;
System.gc();


This gc call doesn't ensure that JVM will run garbage collector but it suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects






share|improve this answer




















  • 4





    I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

    – Zabuza
    Apr 8 at 7:15












  • I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

    – Vaibhav Gupta
    Apr 8 at 7:18






  • 5





    @Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

    – Jonathan Rosenne
    Apr 8 at 7:52

















3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes









15














Explanation



You can not explicitly delete something in Java. It is the garbage collectors job to do that. It will delete anything which is not used anymore by anyone. So either



  1. let the variable fall out of scope or

  2. assign null

  3. or any other instance to it.

Then the array instance (as well as its subarrays) is not referenced anymore and the garbage collector will delete it eventually.




References



To understand why re-assigning the outer array is enough to also delete the inner arrays, you need to understand how they are referenced. Again, the garbage collector will delete anything which is not referenced. So let's take a look at an array such as:



int[][] outer = 1, 2, 3, 4, 5, 6;


We have 4 array instances. One is of type int[][] and three of type int[]. Also, we have one variable outer. The instances are referenced as follows:



 ___> 1, 2
|
outer --> int[][] ---|---> 3, 4
|
|___> 5, 6


So by deleting outer, nobody references int[][] anymore. The garbage collector can now delete it. But that also removes all references to the inner arrays, so the garbage collector can now also delete them.



Now assume that you would reference one of the inner arrays by another variable:



int[][] outer = 1, 2, 3, 4, 5, 6;
int[] thirdInner = outer[2];
other = null; // remove the reference


The situation is now



outer --> null

___> 1, 2
|
int[][] ---|---> 3, 4
|
|______> 5, 6
|
thirdInner _______________|


So the garbage collector will now delete the outer array int[][], which also removes all references to the first and second inner array. But the third is still referenced by thirdInner, so after garbage collection we have:



outer --> null
thirdInner --> 5, 6





share|improve this answer




















  • 3





    "Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

    – Boris the Spider
    Apr 8 at 10:26











  • That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

    – Zabuza
    Apr 8 at 10:34











  • @BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

    – bwoebi
    Apr 8 at 12:25






  • 2





    "Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

    – Boann
    Apr 8 at 16:34






  • 1





    Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

    – Zabuza
    yesterday
















15














Explanation



You can not explicitly delete something in Java. It is the garbage collectors job to do that. It will delete anything which is not used anymore by anyone. So either



  1. let the variable fall out of scope or

  2. assign null

  3. or any other instance to it.

Then the array instance (as well as its subarrays) is not referenced anymore and the garbage collector will delete it eventually.




References



To understand why re-assigning the outer array is enough to also delete the inner arrays, you need to understand how they are referenced. Again, the garbage collector will delete anything which is not referenced. So let's take a look at an array such as:



int[][] outer = 1, 2, 3, 4, 5, 6;


We have 4 array instances. One is of type int[][] and three of type int[]. Also, we have one variable outer. The instances are referenced as follows:



 ___> 1, 2
|
outer --> int[][] ---|---> 3, 4
|
|___> 5, 6


So by deleting outer, nobody references int[][] anymore. The garbage collector can now delete it. But that also removes all references to the inner arrays, so the garbage collector can now also delete them.



Now assume that you would reference one of the inner arrays by another variable:



int[][] outer = 1, 2, 3, 4, 5, 6;
int[] thirdInner = outer[2];
other = null; // remove the reference


The situation is now



outer --> null

___> 1, 2
|
int[][] ---|---> 3, 4
|
|______> 5, 6
|
thirdInner _______________|


So the garbage collector will now delete the outer array int[][], which also removes all references to the first and second inner array. But the third is still referenced by thirdInner, so after garbage collection we have:



outer --> null
thirdInner --> 5, 6





share|improve this answer




















  • 3





    "Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

    – Boris the Spider
    Apr 8 at 10:26











  • That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

    – Zabuza
    Apr 8 at 10:34











  • @BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

    – bwoebi
    Apr 8 at 12:25






  • 2





    "Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

    – Boann
    Apr 8 at 16:34






  • 1





    Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

    – Zabuza
    yesterday














15












15








15







Explanation



You can not explicitly delete something in Java. It is the garbage collectors job to do that. It will delete anything which is not used anymore by anyone. So either



  1. let the variable fall out of scope or

  2. assign null

  3. or any other instance to it.

Then the array instance (as well as its subarrays) is not referenced anymore and the garbage collector will delete it eventually.




References



To understand why re-assigning the outer array is enough to also delete the inner arrays, you need to understand how they are referenced. Again, the garbage collector will delete anything which is not referenced. So let's take a look at an array such as:



int[][] outer = 1, 2, 3, 4, 5, 6;


We have 4 array instances. One is of type int[][] and three of type int[]. Also, we have one variable outer. The instances are referenced as follows:



 ___> 1, 2
|
outer --> int[][] ---|---> 3, 4
|
|___> 5, 6


So by deleting outer, nobody references int[][] anymore. The garbage collector can now delete it. But that also removes all references to the inner arrays, so the garbage collector can now also delete them.



Now assume that you would reference one of the inner arrays by another variable:



int[][] outer = 1, 2, 3, 4, 5, 6;
int[] thirdInner = outer[2];
other = null; // remove the reference


The situation is now



outer --> null

___> 1, 2
|
int[][] ---|---> 3, 4
|
|______> 5, 6
|
thirdInner _______________|


So the garbage collector will now delete the outer array int[][], which also removes all references to the first and second inner array. But the third is still referenced by thirdInner, so after garbage collection we have:



outer --> null
thirdInner --> 5, 6





share|improve this answer















Explanation



You can not explicitly delete something in Java. It is the garbage collectors job to do that. It will delete anything which is not used anymore by anyone. So either



  1. let the variable fall out of scope or

  2. assign null

  3. or any other instance to it.

Then the array instance (as well as its subarrays) is not referenced anymore and the garbage collector will delete it eventually.




References



To understand why re-assigning the outer array is enough to also delete the inner arrays, you need to understand how they are referenced. Again, the garbage collector will delete anything which is not referenced. So let's take a look at an array such as:



int[][] outer = 1, 2, 3, 4, 5, 6;


We have 4 array instances. One is of type int[][] and three of type int[]. Also, we have one variable outer. The instances are referenced as follows:



 ___> 1, 2
|
outer --> int[][] ---|---> 3, 4
|
|___> 5, 6


So by deleting outer, nobody references int[][] anymore. The garbage collector can now delete it. But that also removes all references to the inner arrays, so the garbage collector can now also delete them.



Now assume that you would reference one of the inner arrays by another variable:



int[][] outer = 1, 2, 3, 4, 5, 6;
int[] thirdInner = outer[2];
other = null; // remove the reference


The situation is now



outer --> null

___> 1, 2
|
int[][] ---|---> 3, 4
|
|______> 5, 6
|
thirdInner _______________|


So the garbage collector will now delete the outer array int[][], which also removes all references to the first and second inner array. But the third is still referenced by thirdInner, so after garbage collection we have:



outer --> null
thirdInner --> 5, 6






share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday









isanae

2,55711437




2,55711437










answered Apr 8 at 7:27









ZabuzaZabuza

12.1k52744




12.1k52744







  • 3





    "Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

    – Boris the Spider
    Apr 8 at 10:26











  • That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

    – Zabuza
    Apr 8 at 10:34











  • @BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

    – bwoebi
    Apr 8 at 12:25






  • 2





    "Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

    – Boann
    Apr 8 at 16:34






  • 1





    Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

    – Zabuza
    yesterday













  • 3





    "Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

    – Boris the Spider
    Apr 8 at 10:26











  • That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

    – Zabuza
    Apr 8 at 10:34











  • @BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

    – bwoebi
    Apr 8 at 12:25






  • 2





    "Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

    – Boann
    Apr 8 at 16:34






  • 1





    Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

    – Zabuza
    yesterday








3




3





"Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

– Boris the Spider
Apr 8 at 10:26





"Not referenced" is tricky - as everything is "not referenced" at some point. The correct language is "not reachable by hard references from a GC root".

– Boris the Spider
Apr 8 at 10:26













That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

– Zabuza
Apr 8 at 10:34





That's absolute correct and a good note! But I feel that it would unnecessarily complicate the answer.

– Zabuza
Apr 8 at 10:34













@BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

– bwoebi
Apr 8 at 12:25





@BoristheSpider I think "not referenced" is a good choice of words, as everything is referenced in java, just possibly not necessarily from java objects but from the jvm internals (e.g. stack variables, loaded java.lang.Class instances, ...) (the latter cases being marked together as GC roots). So I'd still call it "referenced".

– bwoebi
Apr 8 at 12:25




2




2





"Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

– Boann
Apr 8 at 16:34





"Not referenced" is not strictly correct. "Not referenced" implies that two objects which refer to each other, or one object which refers to itself, won't be deleted, which is obviously untrue. Garbage collectors don't delete objects that are "not referenced", they delete objects that are not reachable from a GC root (running thread). When null is assigned to outer, the entire array and all inner arrays become not reachable by the program, and all are swept away in one go. It's not necessary to delete the outer array first, in order to discover the inner arrays were also deletable.

– Boann
Apr 8 at 16:34




1




1





Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

– Zabuza
yesterday






Be my guest and correct the terms. But I think it is better to keep it simple and then add a section which has a reference to some deeper explanation, quickly summarizing how it works in two sentences.

– Zabuza
yesterday














13














At some point after the array goes out of scope, the garbage collector will reclaim the memory if there are no other references to it.



If you want to null your reference before the variable goes out of scope (keep in mind that if some other code has this reference, it won't get garbage collected):



Foo[][] fooArray = new Foo[2][3];

...

// this will null the reference to the array
fooArray = null;





share|improve this answer




















  • 3





    Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

    – Konrad Rudolph
    Apr 8 at 9:24












  • Good point - edited.

    – Jason
    Apr 8 at 22:24















13














At some point after the array goes out of scope, the garbage collector will reclaim the memory if there are no other references to it.



If you want to null your reference before the variable goes out of scope (keep in mind that if some other code has this reference, it won't get garbage collected):



Foo[][] fooArray = new Foo[2][3];

...

// this will null the reference to the array
fooArray = null;





share|improve this answer




















  • 3





    Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

    – Konrad Rudolph
    Apr 8 at 9:24












  • Good point - edited.

    – Jason
    Apr 8 at 22:24













13












13








13







At some point after the array goes out of scope, the garbage collector will reclaim the memory if there are no other references to it.



If you want to null your reference before the variable goes out of scope (keep in mind that if some other code has this reference, it won't get garbage collected):



Foo[][] fooArray = new Foo[2][3];

...

// this will null the reference to the array
fooArray = null;





share|improve this answer















At some point after the array goes out of scope, the garbage collector will reclaim the memory if there are no other references to it.



If you want to null your reference before the variable goes out of scope (keep in mind that if some other code has this reference, it won't get garbage collected):



Foo[][] fooArray = new Foo[2][3];

...

// this will null the reference to the array
fooArray = null;






share|improve this answer














share|improve this answer



share|improve this answer








edited Apr 8 at 22:24

























answered Apr 8 at 7:08









JasonJason

9,69733545




9,69733545







  • 3





    Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

    – Konrad Rudolph
    Apr 8 at 9:24












  • Good point - edited.

    – Jason
    Apr 8 at 22:24












  • 3





    Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

    – Konrad Rudolph
    Apr 8 at 9:24












  • Good point - edited.

    – Jason
    Apr 8 at 22:24







3




3





Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

– Konrad Rudolph
Apr 8 at 9:24






Your phrasing (“once”) makes it sounds as if the memory will be reclaimed as soon as the last reference goes out of scope. It’s a rather important property of the Java GC that this is not the case.

– Konrad Rudolph
Apr 8 at 9:24














Good point - edited.

– Jason
Apr 8 at 22:24





Good point - edited.

– Jason
Apr 8 at 22:24











2














Unlike C, Java provides automatic garbage collection,which will clear the array for you as it becomes unreachable(i.e goes out of scope).If you want you can make the array as null so that the memory location becomes unreachable.



 Foo[][] fooArray = new Foo[2][3];
.
.
.
fooArray = null;
System.gc();


This gc call doesn't ensure that JVM will run garbage collector but it suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects






share|improve this answer




















  • 4





    I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

    – Zabuza
    Apr 8 at 7:15












  • I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

    – Vaibhav Gupta
    Apr 8 at 7:18






  • 5





    @Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

    – Jonathan Rosenne
    Apr 8 at 7:52















2














Unlike C, Java provides automatic garbage collection,which will clear the array for you as it becomes unreachable(i.e goes out of scope).If you want you can make the array as null so that the memory location becomes unreachable.



 Foo[][] fooArray = new Foo[2][3];
.
.
.
fooArray = null;
System.gc();


This gc call doesn't ensure that JVM will run garbage collector but it suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects






share|improve this answer




















  • 4





    I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

    – Zabuza
    Apr 8 at 7:15












  • I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

    – Vaibhav Gupta
    Apr 8 at 7:18






  • 5





    @Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

    – Jonathan Rosenne
    Apr 8 at 7:52













2












2








2







Unlike C, Java provides automatic garbage collection,which will clear the array for you as it becomes unreachable(i.e goes out of scope).If you want you can make the array as null so that the memory location becomes unreachable.



 Foo[][] fooArray = new Foo[2][3];
.
.
.
fooArray = null;
System.gc();


This gc call doesn't ensure that JVM will run garbage collector but it suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects






share|improve this answer















Unlike C, Java provides automatic garbage collection,which will clear the array for you as it becomes unreachable(i.e goes out of scope).If you want you can make the array as null so that the memory location becomes unreachable.



 Foo[][] fooArray = new Foo[2][3];
.
.
.
fooArray = null;
System.gc();


This gc call doesn't ensure that JVM will run garbage collector but it suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects







share|improve this answer














share|improve this answer



share|improve this answer








edited Apr 8 at 7:15

























answered Apr 8 at 7:14









Vaibhav GuptaVaibhav Gupta

475311




475311







  • 4





    I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

    – Zabuza
    Apr 8 at 7:15












  • I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

    – Vaibhav Gupta
    Apr 8 at 7:18






  • 5





    @Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

    – Jonathan Rosenne
    Apr 8 at 7:52












  • 4





    I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

    – Zabuza
    Apr 8 at 7:15












  • I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

    – Vaibhav Gupta
    Apr 8 at 7:18






  • 5





    @Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

    – Jonathan Rosenne
    Apr 8 at 7:52







4




4





I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

– Zabuza
Apr 8 at 7:15






I do not really see the benefit of suggesting System#gc. In most situations it will degrade performance. Let the garbage collector do it's job. It is usually only used to cleanup before a measurement (profiler and other tools).

– Zabuza
Apr 8 at 7:15














I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

– Vaibhav Gupta
Apr 8 at 7:18





I agree with you but in some cases, it may make sense to suggest to the JVM that it do a full collection NOW as you may know the application will be sitting idle for the next few minutes before heavy work

– Vaibhav Gupta
Apr 8 at 7:18




5




5





@Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

– Jonathan Rosenne
Apr 8 at 7:52





@Vaibhav Gupta The garbage collector does not clear the array, it only frees it. It is possible for malware to access the data, sometimes for a long time, until the memory has been reused. If the array contains sensitive data it should be actively cleared before being released.

– Jonathan Rosenne
Apr 8 at 7:52



Popular posts from this blog

getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

NetworkManager fails with “Could not find source connection”Trouble connecting to VPN using network-manager, while command line worksHow can I be notified about state changes to a VPN adapterBacktrack 5 R3 - Refuses to connect to VPNFeed all traffic through OpenVPN for a specific network namespace onlyRun daemon on startup in Debian once openvpn connection establishedpfsense tcp connection between openvpn and lan is brokenInternet connection problem with web browsers onlyWhy does NetworkManager explicitly support tun/tap devices?Browser issues with VPNTwo IP addresses assigned to the same network card - OpenVPN issues?Cannot connect to WiFi with nmcli, although secrets are provided

대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495