The Artima Developer Community
Sponsored Link

Java Answers Forum
i don't understand i ?

1 reply on 1 page. Most recent reply: Oct 27, 2004 1:05 AM by Matthias Neumair

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 1 reply on 1 page
Himanshu

Posts: 1
Nickname: himanshukp
Registered: Oct, 2004

i don't understand i ? Posted: Oct 26, 2004 4:28 AM
Reply to this message Reply
Advertisement
class chair{
static boolean gcrun =false;
static boolean f = false;
static int created =0;
static int finalized =0;
int i;
chair() {

if(!gcrun)
System.out.println("himanshu ="+ i+" created ="+created+" fin = " +

finalized);
if(created>52000 && created<52037)
System.out.println("himanshu ="+ i+" created ="+created+" final =" +

finalized);
i= ++created;

if (created == 47)
System.out.println("created 47");
}
public void finalize() {

if(!gcrun) {
gcrun = true;
System.out.println(
"beginning to finalize after "+ created + " Chair have been created ");
System.out.println("i ="+i+" chair ="+ created ); }

if(i<100)
System.out.println("i =" + i+" chair ="+ created + " finalized =" +

finalized);

if(i==47){
System.out.println("Finalizing chair #47, " + "Setting flag to stop chair

creation");
f =true;
}
if( i>1&&i<3)
System.out.println("created ="+ created + " finalize ="+finalized);
finalized++;
if (finalized >= created)
System.out.println( " all " + finalized + " finalized " );
}
}
public class garbage{
public static void main( String[] args) {
while( !chair.f){
new chair();

new String ( " to take up

space");
}
System.out.println( " after all chairs have been created:\n"

+"total created =" + chair. created + ", total finlized = " + chair.finalized);
if(args.length>0) {
if(args[0].equals("gc") ||

args[0].equals("all")) {
System.out.println("gc() :

");
System.gc();
}
if(args[0].equals("finalize") || args[0].equals("all")) {


System.out.println("runfinalization() : ");
System.runFinalization();


}
}
System.out.println("bye!");
}
}
I write this programme from the book Thinking in Java . I don't understand
1. in the fuction finalize in if(!gcrun) , when i print out the value of i this is (according to my

compiler) is 1530.
2. but in the (2) line this value start from (0 to 99) means i 's value start from zero. why?
How in finalize i's value is increasing as i is non static.
Sir, Bruce eckel write [if(i == 47) ] is used to stop making of chairs in function finalize.But i don't

understand how can this be possible.
Because how in finalize variable i value is increasing.
because When I try to print out value of i in Constructor chair( ) using if(!gcrun) then it always showing

(only for value of i and not of created)
Zero. Probably because i is non-static.At last
in (2 ) When i run the programme i see that for all values of i i.e. from 1 to 99 value of chair(created)

is constant. It means the object chair stop before this line is executing see line (A) below
himanshu =0 created =994 fin = 0
himanshu =0 created =995 fin = 0
himanshu =0 created =996 fin = 0
himanshu =0 created =997 fin = 0
himanshu =0 created =998 fin = 0
himanshu =0 created =999 fin = 0
himanshu =0 created =1000 fin = 0
himanshu =0 created =1001 fin = 0
himanshu =0 created =1002 fin = 0
himanshu =0 created =1003 fin = 0
himanshu =0 created =1004 fin = 0
himanshu =0 created =1005 fin = 0
himanshu =0 created =1006 fin = 0
himanshu =0 created =1007 fin = 0
himanshu =0 created =1008 fin = 0
himanshu =0 created =1009 fin = 0
himanshu =0 created =1010 fin = 0
himanshu =0 created =1011 fin = 0
himanshu =0 created =1012 fin = 0
himanshu =0 created =1013 fin = 0
himanshu =0 created =1014 fin = 0
himanshu =0 created =1015 fin = 0
himanshu =0 created =1016 fin = 0
himanshu =0 created =1017 fin = 0
himanshu =0 created =1018 fin = 0
himanshu =0 created =1019 fin = 0
himanshu =0 created =1020 fin = 0
himanshu =0 created =1021 fin = 0
himanshu =0 created =1022 fin = 0
himanshu =0 created =1023 fin = 0
himanshu =0 created =1024 fin = 0
himanshu =0 created =1025 fin = 0
himanshu =0 created =1026 fin = 0
himanshu =0 created =1027 fin = 0
himanshu =0 created =1028 fin = 0
himanshu =0 created =1029 fin = 0
himanshu =0 created =1030 fin = 0
himanshu =0 created =1031 fin = 0
himanshu =0 created =1032 fin = 0
himanshu =0 created =1033 fin = 0
himanshu =0 created =1034 fin = 0
himanshu =0 created =1035 fin = 0
himanshu =0 created =1036 fin = 0
himanshu =0 created =1037 fin = 0
himanshu =0 created =1038 fin = 0
himanshu =0 created =1039 fin = 0
himanshu =0 created =1040 fin = 0
himanshu =0 created =1041 fin = 0
himanshu =0 created =1042 fin = 0
himanshu =0 created =1043 fin = 0
himanshu =0 created =1044 fin = 0
himanshu =0 created =1045 fin = 0
himanshu =0 created =1046 fin = 0
himanshu =0 created =1047 fin = 0
himanshu =0 created =1048 fin = 0
himanshu =0 created =1049 fin = 0
himanshu =0 created =1050 fin = 0
himanshu =0 created =1051 fin = 0
himanshu =0 created =1052 fin = 0
himanshu =0 created =1053 fin = 0
himanshu =0 created =1054 fin = 0
himanshu =0 created =1055 fin = 0
himanshu =0 created =1056 fin = 0
himanshu =0 created =1057 fin = 0
himanshu =0 created =1058 fin = 0
himanshu =0 created =1059 fin = 0
himanshu =0 created =1060 fin = 0
himanshu =0 created =1061 fin = 0
himanshu =0 created =1062 fin = 0
himanshu =0 created =1063 fin = 0
himanshu =0 created =1064 fin = 0
himanshu =0 created =1065 fin = 0
himanshu =0 created =1066 fin = 0
himanshu =0 created =1067 fin = 0
himanshu =0 created =1068 fin = 0
himanshu =0 created =1069 fin = 0
himanshu =0 created =1070 fin = 0
himanshu =0 created =1071 fin = 0
himanshu =0 created =1072 fin = 0
himanshu =0 created =1073 fin = 0
himanshu =0 created =1074 fin = 0
himanshu =0 created =1075 fin = 0
himanshu =0 created =1076 fin = 0
himanshu =0 created =1077 fin = 0
himanshu =0 created =1078 fin = 0
himanshu =0 created =1079 fin = 0
himanshu =0 created =1080 fin = 0
himanshu =0 created =1081 fin = 0
himanshu =0 created =1082 fin = 0
himanshu =0 created =1083 fin = 0
himanshu =0 created =1084 fin = 0
himanshu =0 created =1085 fin = 0
himanshu =0 created =1086 fin = 0
himanshu =0 created =1087 fin = 0
himanshu =0 created =1088 fin = 0
himanshu =0 created =1089 fin = 0
himanshu =0 created =1090 fin = 0
himanshu =0 created =1091 fin = 0
himanshu =0 created =1092 fin = 0
himanshu =0 created =1093 fin = 0
himanshu =0 created =1094 fin = 0
himanshu =0 created =1095 fin = 0
himanshu =0 created =1096 fin = 0
himanshu =0 created =1097 fin = 0
himanshu =0 created =1098 fin = 0
himanshu =0 created =1099 fin = 0
himanshu =0 created =1100 fin = 0
himanshu =0 created =1101 fin = 0
himanshu =0 created =1102 fin = 0
himanshu =0 created =1103 fin = 0
himanshu =0 created =1104 fin = 0
himanshu =0 created =1105 fin = 0
himanshu =0 created =1106 fin = 0
himanshu =0 created =1107 fin = 0
himanshu =0 created =1108 fin = 0
himanshu =0 created =1109 fin = 0
himanshu =0 created =1110 fin = 0
himanshu =0 created =1111 fin = 0
himanshu =0 created =1112 fin = 0
himanshu =0 created =1113 fin = 0
himanshu =0 created =1114 fin = 0
himanshu =0 created =1115 fin = 0
himanshu =0 created =1116 fin = 0
himanshu =0 created =1117 fin = 0
himanshu =0 created =1118 fin = 0
himanshu =0 created =1119 fin = 0
himanshu =0 created =1120 fin = 0
himanshu =0 created =1121 fin = 0
himanshu =0 created =1122 fin = 0
himanshu =0 created =1123 fin = 0
himanshu =0 created =1124 fin = 0
himanshu =0 created =1125 fin = 0
himanshu =0 created =1126 fin = 0
himanshu =0 created =1127 fin = 0
himanshu =0 created =1128 fin = 0
himanshu =0 created =1129 fin = 0
himanshu =0 created =1130 fin = 0
himanshu =0 created =1131 fin = 0
himanshu =0 created =1132 fin = 0
himanshu =0 created =1133 fin = 0
himanshu =0 created =1134 fin = 0
himanshu =0 created =1135 fin = 0
himanshu =0 created =1136 fin = 0
himanshu =0 created =1137 fin = 0
himanshu =0 created =1138 fin = 0
himanshu =0 created =1139 fin = 0
himanshu =0 created =1140 fin = 0
himanshu =0 created =1141 fin = 0
himanshu =0 created =1142 fin = 0
himanshu =0 created =1143 fin = 0
himanshu =0 created =1144 fin = 0
himanshu =0 created =1145 fin = 0
himanshu =0 created =1146 fin = 0
himanshu =0 created =1147 fin = 0
himanshu =0 created =1148 fin = 0
himanshu =0 created =1149 fin = 0
himanshu =0 created =1150 fin = 0
himanshu =0 created =1151 fin = 0
himanshu =0 created =1152 fin = 0
himanshu =0 created =1153 fin = 0
himanshu =0 created =1154 fin = 0
himanshu =0 created =1155 fin = 0
himanshu =0 created =1156 fin = 0
himanshu =0 created =1157 fin = 0
himanshu =0 created =1158 fin = 0
himanshu =0 created =1159 fin = 0
himanshu =0 created =1160 fin = 0
himanshu =0 created =1161 fin = 0
himanshu =0 created =1162 fin = 0
himanshu =0 created =1163 fin = 0
himanshu =0 created =1164 fin = 0
himanshu =0 created =1165 fin = 0
himanshu =0 created =1166 fin = 0
himanshu =0 created =1167 fin = 0
himanshu =0 created =1168 fin = 0
himanshu =0 created =1169 fin = 0
himanshu =0 created =1170 fin = 0
himanshu =0 created =1171 fin = 0
himanshu =0 created =1172 fin = 0
himanshu =0 created =1173 fin = 0
himanshu =0 created =1174 fin = 0
himanshu =0 created =1175 fin = 0
himanshu =0 created =1176 fin = 0
beginning to finalize after 1177 Chair have been created
i =1173 chair =1177 why here i = 1173 ( I think it comes out to be 0.But it has value always 4 less than the

value of created
not only this it (i)only equal to this value in this if(!gcrun) of finalize . and it ( i)started from 1

below see below ,
himanshu =0 created =52001 final =13986
himanshu =0 created =52002 final =13986
himanshu =0 created =52003 final =13986
himanshu =0 created =52004 final =13986
himanshu =0 created =52005 final =13986
himanshu =0 created =52006 final =13986
himanshu =0 created =52007 final =13986
himanshu =0 created =52008 final =13986
himanshu =0 created =52009 final =13986
i =1 chair =52009 finalized =16033 Here i started from 1. I don't understand this . if in

if(!gcrun) it has value i=1173 then this if [( if(i<100)
System.out.println("i =" + i+" chair ="+ created + " finalized =" +

finalized);] never executed.But it executed Why?

i =2 chair =52009 finalized =16034
created =52009 finalize =16034
i =3 chair =52009 finalized =16035 (A) look here sir chair has constant value for all i. it means chair

constructor calling in main stops at this stage .But according tto Bruce Eckel, it stops after if(i == 47)

executed in finalize(). Clear this also.
i =4 chair =52009 finalized =16036
i =5 chair =52009 finalized =16037
i =6 chair =52009 finalized =16038
i =7 chair =52009 finalized =16039
i =8 chair =52009 finalized =16040
i =9 chair =52009 finalized =16041
i =10 chair =52009 finalized =16042
i =11 chair =52009 finalized =16043
i =12 chair =52009 finalized =16044
i =13 chair =52009 finalized =16045
i =14 chair =52009 finalized =16046
i =15 chair =52009 finalized =16047
i =16 chair =52009 finalized =16048
i =17 chair =52009 finalized =18087
i =18 chair =52009 finalized =18088
i =19 chair =52009 finalized =18089
i =20 chair =52009 finalized =18090
i =21 chair =52009 finalized =18091
i =22 chair =52009 finalized =18092
i =23 chair =52009 finalized =18093
i =24 chair =52009 finalized =18094
i =25 chair =52009 finalized =18095
i =26 chair =52009 finalized =18096
i =27 chair =52009 finalized =18097
i =28 chair =52009 finalized =18098
i =29 chair =52009 finalized =18099
i =30 chair =52009 finalized =18100
i =31 chair =52009 finalized =18101
i =32 chair =52009 finalized =18102
i =33 chair =52009 finalized =18103
i =34 chair =52009 finalized =18104
i =35 chair =52009 finalized =18105
i =36 chair =52009 finalized =18106
i =37 chair =52009 finalized =18107
i =38 chair =52009 finalized =18108
i =39 chair =52009 finalized =18109
i =40 chair =52009 finalized =18110
i =41 chair =52009 finalized =18111
i =42 chair =52009 finalized =18112
i =43 chair =52009 finalized =18113
i =44 chair =52009 finalized =18114
i =45 chair =52009 finalized =18115
i =46 chair =52009 finalized =18116
i =47 chair =52009 finalized =18117
Finalizing chair #47, Setting flag to stop chair creation
i =48 chair =52009 finalized =18118
i =49 chair =52009 finalized =18119
i =50 chair =52009 finalized =18120
i =51 chair =52009 finalized =18121
i =52 chair =52009 finalized =18122
i =53 chair =52009 finalized =18123
i =54 chair =52009 finalized =18124
i =55 chair =52009 finalized =18125
i =56 chair =52009 finalized =18126
i =57 chair =52009 finalized =18127
i =58 chair =52009 finalized =18128
i =59 chair =52009 finalized =18129
i =60 chair =52009 finalized =18130
i =61 chair =52009 finalized =18131
i =62 chair =52009 finalized =18132
i =63 chair =52009 finalized =18133
i =64 chair =52009 finalized =18134
i =65 chair =52009 finalized =18135
i =66 chair =52009 finalized =18136
i =67 chair =52009 finalized =18137
i =68 chair =52009 finalized =18138
i =69 chair =52009 finalized =18139
i =70 chair =52009 finalized =18140
i =71 chair =52009 finalized =18141
i =72 chair =52009 finalized =18142
i =73 chair =52009 finalized =18143
i =74 chair =52009 finalized =18144
i =75 chair =52009 finalized =18145
i =76 chair =52009 finalized =18146
i =77 chair =52009 finalized =18147
i =78 chair =52009 finalized =18148
i =79 chair =52009 finalized =18149
i =80 chair =52009 finalized =18150
i =81 chair =52009 finalized =18151
i =82 chair =52009 finalized =18152
i =83 chair =52009 finalized =18153
i =84 chair =52009 finalized =18154
i =85 chair =52009 finalized =18155
i =86 chair =52009 finalized =18156
i =87 chair =52009 finalized =18157
i =88 chair =52009 finalized =18158
i =89 chair =52009 finalized =18159
i =90 chair =52009 finalized =18160
i =91 chair =52009 finalized =18161
i =92 chair =52009 finalized =18162
i =93 chair =52009 finalized =18163
i =94 chair =52009 finalized =18164
i =95 chair =52009 finalized =18165
i =96 chair =52009 finalized =18166
i =97 chair =52009 finalized =18167
i =98 chair =52009 finalized =18168
i =99 chair =52009 finalized =18169
after all chairs have been created:
total created =52010, total finlized = 41658
bye!

H:\java>


Matthias Neumair

Posts: 660
Nickname: neumi
Registered: Sep, 2003

Re: i don't understand i ? Posted: Oct 27, 2004 1:05 AM
Reply to this message Reply
the method finalize is called everytime gc() runs, because you never create a reference to the chair object.

The point is, that gc() is called from the Java Virtual Machine "randomly", you can't predict when it's called.

So: The construction of chairs does NOT stop at i = 47.
But it stops, when gc() calls the finalize() method at chair nr. 47. Is this clear? You have 2 different asynchrone Threads.
The first one does not stop at i == 47, but at f == true.
The second one runs later, when ther were created a lot of chairs allready. Then it arrives at a point when the handled chair has i == 47 and sets f=true


I don't know why i==created-4, but my guess is that it has something to do with the time the System needs to handle static variables.


To the point that i was 1173, than it was below 100.
Who says the objects get destroyed in the order they were created?
Maybe (just maybe) the system first looks at the last created object, then begins to search for other lost objects.


I don't know the internal routines of the Java Virtual Machine very good, but maybe I can halp YOU to understand them.

Flat View: This topic has 1 reply on 1 page
Topic: Looking for Java Programmers Previous Topic   Next Topic Topic: objects in java

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use